[PATCH] Ran reindent.py from cpython tools on all python scripts

Mike McLean mikem at redhat.com
Tue May 12 13:55:22 UTC 2015


On 04/06/2015 12:10 PM, Pavol Babincak wrote:
> Citing from reindent docs:
>
>      Change Python (.py) files to use 4-space indents and no hard tab
>      characters. Also trim excess spaces and tabs from ends of lines, and
>      remove empty lines at the end of files.  Also ensure the last line
>      ends with a newline.
>
> Citing from PEP 8:
>
>      Use 4 spaces per indentation level.
>
>      Python 2 code indented with a mixture of tabs and spaces should be
>      converted to using spaces exclusively.
>
>      Don't write string literals that rely on significant trailing
>      whitespace. Such trailing whitespace is visually indistinguishable
>      and some editors (or more recently, reindent.py) will trim them.
>
> Also PyLint recommends not to have trailing whitespace on any line.

ack. pulling in.

> ---
>   builder/kojid                 | 140 +++++++++++++++++++++---------------------
>   cli/koji                      |  70 ++++++++++-----------
>   hub/kojihub.py                |  28 ++++-----
>   hub/kojixmlrpc.py             |   6 +-
>   koji/__init__.py              |   4 +-
>   koji/auth.py                  |  10 +--
>   koji/context.py               |   2 +-
>   koji/daemon.py                |   2 +-
>   koji/db.py                    |   2 +-
>   koji/plugin.py                |   2 +-
>   koji/policy.py                |   3 +-
>   koji/server.py                |   1 -
>   koji/ssl/SSLCommon.py         |   1 -
>   koji/ssl/SSLConnection.py     |   1 -
>   koji/ssl/XMLRPCServerProxy.py |   1 -
>   koji/tasks.py                 |   2 +-
>   koji/util.py                  |   2 +-
>   plugins/messagebus.py         |  26 ++++----
>   plugins/runroot.py            |   2 -
>   util/koji-gc                  |   1 -
>   util/koji-shadow              |   1 -
>   util/kojira                   |   4 +-
>   vm/kojikamid.py               |   6 +-
>   www/kojiweb/index.py          |  98 ++++++++++++++---------------
>   www/lib/kojiweb/util.py       |  15 +++--
>   25 files changed, 210 insertions(+), 220 deletions(-)
>
> diff --git a/builder/kojid b/builder/kojid
> index 3df0588..ae33e15 100755
> --- a/builder/kojid
> +++ b/builder/kojid
> @@ -5,7 +5,7 @@
>   #
>   #    Koji is free software; you can redistribute it and/or
>   #    modify it under the terms of the GNU Lesser General Public
> -#    License as published by the Free Software Foundation;
> +#    License as published by the Free Software Foundation;
>   #    version 2.1 of the License.
>   #
>   #    This software is distributed in the hope that it will be useful,
> @@ -1032,11 +1032,11 @@ class BaseBuildTask(BaseTaskHandler):
>               tag_arches = [koji.canonArch(a) for a in tag['arches'].split()]
>               host_arches = hostdata['arches'].split()
>               if not set(tag_arches).intersection(host_arches):
> -                    self.logger.info('Task %s (%s): tag arches (%s) and ' \
> -                                     'host arches (%s) are disjoint' % \
> -                                     (self.id, self.method,
> -                                      ', '.join(tag_arches), ', '.join(host_arches)))
> -                    return False
> +                self.logger.info('Task %s (%s): tag arches (%s) and ' \
> +                                 'host arches (%s) are disjoint' % \
> +                                 (self.id, self.method,
> +                                  ', '.join(tag_arches), ', '.join(host_arches)))
> +                return False
>           #otherwise...
>           # This is in principle an error condition, but this is not a good place
>           # to fail. Instead we proceed and let the task fail normally.
> @@ -2389,7 +2389,7 @@ class ImageTask(BaseTaskHandler):
>
>       def fetchKickstart(self, broot, ksfile):
>           """
> -        Retrieve the kickstart file we were given (locally or remotely) and
> +        Retrieve the kickstart file we were given (locally or remotely) and
>           upload it.
>
>           Note that if the KS file existed locally, then "ksfile" is a relative
> @@ -2488,7 +2488,7 @@ class ImageTask(BaseTaskHandler):
>
>           # Write out the new ks file. Note that things may not be in the same
>           # order and comments in the original ks file may be lost.
> -        kskoji = os.path.join('/tmp', 'koji-image-%s-%i.ks' %
> +        kskoji = os.path.join('/tmp', 'koji-image-%s-%i.ks' %
>                                 (target_info['build_tag_name'], self.id))
>           kojikspath = os.path.join(broot.rootdir(), kskoji[1:])
>           outfile = open(kojikspath, 'w')
> @@ -2503,7 +2503,7 @@ class ImageTask(BaseTaskHandler):
>
>       def getImagePackages(self, cachepath):
>           """
> -        Read RPM header information from the yum cache available in the
> +        Read RPM header information from the yum cache available in the
>           given path. Returns a list of dictionaries for each RPM included.
>           """
>           found = False
> @@ -2524,8 +2524,8 @@ class ImageTask(BaseTaskHandler):
>               raise koji.LiveCDError, 'No repos found in yum cache!'
>           return hdrlist
>
> -# ApplianceTask begins with a mock chroot, and then installs appliance-tools
> -# into it via the appliance-build group. appliance-creator is then executed
> +# ApplianceTask begins with a mock chroot, and then installs appliance-tools
> +# into it via the appliance-build group. appliance-creator is then executed
>   # in the chroot to create the appliance image.
>   #
>   class ApplianceTask(ImageTask):
> @@ -2548,7 +2548,7 @@ class ApplianceTask(ImageTask):
>           if opts == None:
>               opts = {}
>           self.opts = opts
> -        broot = self.makeImgBuildRoot(build_tag, repo_info, arch,
> +        broot = self.makeImgBuildRoot(build_tag, repo_info, arch,
>                                         'appliance-build')
>           kspath = self.fetchKickstart(broot, ksfile)
>           self.readKickstart(kspath, opts)
> @@ -2561,11 +2561,11 @@ class ApplianceTask(ImageTask):
>           app_log = '/tmp/appliance.log'
>           os.mkdir(opath)
>
> -        cmd = ['/usr/bin/appliance-creator', '-c', kskoji, '-d', '-v',
> +        cmd = ['/usr/bin/appliance-creator', '-c', kskoji, '-d', '-v',
>                  '--logfile', app_log, '--cache', cachedir, '-o', odir]
>           for arg_name in ('vmem', 'vcpu', 'format'):
>               arg = opts.get(arg_name)
> -            if arg != None:
> +            if arg != None:
>                   cmd.extend(['--%s' % arg_name, arg])
>           appname = '%s-%s-%s' % (name, version, release)
>           cmd.extend(['--name', appname])
> @@ -2582,7 +2582,7 @@ class ApplianceTask(ImageTask):
>           results = []
>           for directory, subdirs, files in os.walk(opath):
>               for f in files:
> -                results.append(os.path.join(broot.rootdir(), 'tmp',
> +                results.append(os.path.join(broot.rootdir(), 'tmp',
>                                               directory, f))
>           self.logger.debug('output: %s' % results)
>           if len(results) == 0:
> @@ -2610,7 +2610,7 @@ class ApplianceTask(ImageTask):
>                   cachedir[1:]))
>               broot.markExternalRPMs(hdrlist)
>               imgdata['rpmlist'] = hdrlist
> -
> +
>           broot.expire()
>           return imgdata
>
> @@ -2706,7 +2706,7 @@ class LiveCDTask(ImageTask):
>           livecd_log = '/tmp/livecd.log'
>           cmd = ['/usr/bin/livecd-creator', '-c', kskoji, '-d', '-v',
>                  '--logfile', livecd_log, '--cache', cachedir]
> -        # we set the fs label to the same as the isoname if it exists,
> +        # we set the fs label to the same as the isoname if it exists,
>           # taking at most 32 characters
>           isoname = '%s-%s-%s' % (name, version, release)
>           cmd.extend(['-f', isoname[:32]])
> @@ -3398,7 +3398,7 @@ class BaseImageTask(OzImageTask):
>   class BuildIndirectionImageTask(OzImageTask):
>       Methods = ['indirectionimage']
>
> -    # So, these are copied directly from the base image class
> +    # So, these are copied directly from the base image class
>       # Realistically, we want to inherit methods from both BuildImageTask
>       # and OzImageTask.
>       # TODO: refactor - my initial suggestion would be to have OzImageTask
> @@ -3427,7 +3427,7 @@ class BuildIndirectionImageTask(OzImageTask):
>       def fetchHubOrSCM(self, filepath, fileurl):
>           """
>           Retrieve a file either from the hub or a remote scm
> -
> +
>           If fileurl is None we assume we are being asked to retrieve from
>           the hub and that filepath is relative to /mnt/koji/work.
>           if fileurl contains a value we assume a remote SCM.
> @@ -3466,7 +3466,7 @@ class BuildIndirectionImageTask(OzImageTask):
>           def _task_to_image(task_id):
>               """ Take a task ID and turn it into an Image Factory Base Image object """
>               pim = PersistentImageManager.default_manager()
> -	    taskinfo = self.session.getTaskInfo(task_id)
> +            taskinfo = self.session.getTaskInfo(task_id)
>               taskstate = koji.TASK_STATES[taskinfo['state']].lower()
>               if taskstate != 'closed':
>                   raise koji.BuildError("Input task (%d) must be in closed state - current state is (%s)" %
> @@ -3475,21 +3475,21 @@ class BuildIndirectionImageTask(OzImageTask):
>               if taskmethod != "createImage":
>                   raise koji.BuildError("Input task method must be 'createImage' - actual method (%s)" %
>                                         (taskmethod))
> -	    result = self.session.getTaskResult(task_id)
> -	    files = self.session.listTaskOutput(task_id)
> +            result = self.session.getTaskResult(task_id)
> +            files = self.session.listTaskOutput(task_id)
>
>               # This approach works for both scratch and saved/formal images
>               # The downside is that we depend on the output file naming convention
> -	    def _match_name(inlist, namere):
> -		for filename in inlist:
> -		    if re.search(namere, filename):
> -			return filename
> -	    task_diskimage = _match_name(result['files'], ".*qcow2$")
> -	    task_tdl = _match_name(result['files'], "tdl.*xml")
> +            def _match_name(inlist, namere):
> +                for filename in inlist:
> +                    if re.search(namere, filename):
> +                        return filename
> +            task_diskimage = _match_name(result['files'], ".*qcow2$")
> +            task_tdl = _match_name(result['files'], "tdl.*xml")
>
> -	    task_dir = os.path.join(koji.pathinfo.work(),koji.pathinfo.taskrelpath(task_id))
> -	    diskimage_full = os.path.join(task_dir, task_diskimage)
> -	    tdl_full = os.path.join(task_dir, task_tdl)
> +            task_dir = os.path.join(koji.pathinfo.work(),koji.pathinfo.taskrelpath(task_id))
> +            diskimage_full = os.path.join(task_dir, task_diskimage)
> +            tdl_full = os.path.join(task_dir, task_tdl)
>
>               if not (os.path.isfile(diskimage_full) and os.path.isfile(tdl_full)):
>                   raise koji.BuildError("Missing TDL or qcow2 image for task (%d) - possible expired scratch build" % (task_id))
> @@ -3508,7 +3508,7 @@ class BuildIndirectionImageTask(OzImageTask):
>               factory_base_image.status = 'COMPLETE'
>               # Now save it
>               pim.save_image(factory_base_image)
> -
> +
>               # We can now reference this object directly or via its UUID in persistent storage
>               return factory_base_image
>
> @@ -3518,10 +3518,10 @@ class BuildIndirectionImageTask(OzImageTask):
>               build = self.session.getBuild(nvr)
>               if not build:
>                   raise koji.BuildError("Could not find build for (%s)" % (nvr))
> -
> +
>               buildarchives = self.session.listArchives(build['id'])
>               if not buildarchives:
> -                raise koji.Builderror("Could not retrieve archives for build (%s) from NVR (%s)" %
> +                raise koji.Builderror("Could not retrieve archives for build (%s) from NVR (%s)" %
>                                         (build['id'], nvr))
>
>               buildfiles = [ x['filename'] for x in buildarchives ]
> @@ -3539,7 +3539,7 @@ class BuildIndirectionImageTask(OzImageTask):
>               tdl_full = os.path.join(builddir, build_tdl)
>
>               if not (os.path.isfile(diskimage_full) and os.path.isfile(tdl_full)):
> -                raise koji.BuildError("Missing TDL (%s) or qcow2 (%s) image for image (%s) - this should never happen" %
> +                raise koji.BuildError("Missing TDL (%s) or qcow2 (%s) image for image (%s) - this should never happen" %
>                                         (build_tdl, build_diskimage, nvr))
>
>               # The sequence to recreate a valid persistent image is as follows
> @@ -3588,12 +3588,12 @@ class BuildIndirectionImageTask(OzImageTask):
>           release = opts['release']
>
>           # TODO: Another mostly copy-paste
> -	if not release:
> -	    release = self.getRelease(name, version)
> -	if '-' in version:
> -	    raise koji.ApplianceError('The Version may not have a hyphen')
> -	if '-' in  release:
> -	    raise koji.ApplianceError('The Release may not have a hyphen')
> +        if not release:
> +            release = self.getRelease(name, version)
> +        if '-' in version:
> +            raise koji.ApplianceError('The Version may not have a hyphen')
> +        if '-' in  release:
> +            raise koji.ApplianceError('The Release may not have a hyphen')
>
>           indirection_template = self.fetchHubOrSCM(opts.get('indirection_template'),
>                                                     opts.get('indirection_template_url'))
> @@ -3601,24 +3601,24 @@ class BuildIndirectionImageTask(OzImageTask):
>           self.logger.debug('Got indirection template %s' % (indirection_template))
>
>           try:
> -	    if opts['utility_image_build']:
> -		utility_factory_image = _nvr_to_image(opts['utility_image_build'], opts['arch'])
> -	    else:
> -		utility_factory_image = _task_to_image(int(opts['utility_image_task']))
> -
> -	    if opts['base_image_build']:
> -		base_factory_image = _nvr_to_image(opts['base_image_build'], opts['arch'])
> -	    else:
> -		base_factory_image = _task_to_image(int(opts['base_image_task']))
> +            if opts['utility_image_build']:
> +                utility_factory_image = _nvr_to_image(opts['utility_image_build'], opts['arch'])
> +            else:
> +                utility_factory_image = _task_to_image(int(opts['utility_image_task']))
> +
> +            if opts['base_image_build']:
> +                base_factory_image = _nvr_to_image(opts['base_image_build'], opts['arch'])
> +            else:
> +                base_factory_image = _task_to_image(int(opts['base_image_task']))
>           except Exception, e:
>               self.logger.exception(e)
>               raise
>
>           # OK - We have a template and two input images - lets build
> -	bld_info = None
> -	if not opts['scratch']:
> -	    bld_info = self.initImageBuild(name, version, release,
> -		target_info, opts)
> +        bld_info = None
> +        if not opts['scratch']:
> +            bld_info = self.initImageBuild(name, version, release,
> +                target_info, opts)
>
>           try:
>               return self._do_indirection(opts, base_factory_image, utility_factory_image,
> @@ -3667,9 +3667,9 @@ class BuildIndirectionImageTask(OzImageTask):
>                       open(target_image.data, "w").write("Mock build from task ID: %s" %
>                                                    (str(self.id)))
>                       target_image.status='COMPLETE'
> -                else:
> +                else:
>                       target = bd.builder_for_target_image('indirection',
> -                        image_id=base_factory_image.identifier,
> +                        image_id=base_factory_image.identifier,
>                           parameters=params)
>                       target.target_thread.join()
>               except Exception, e:
> @@ -3697,7 +3697,7 @@ class BuildIndirectionImageTask(OzImageTask):
>           myresults['logs'] = [ os.path.basename(ozlog) ]
>           myresults['arch'] = opts['arch']
>           # TODO: This should instead track the two input images: base and utility
> -        myresults['rpmlist'] = [ ]
> +        myresults['rpmlist'] = [ ]
>
>           # This is compatible with some helper methods originally implemented for the base
>           # image build.  In the original usage, the dict contains an entry per build arch
> @@ -3825,7 +3825,7 @@ class BuildSRPMFromSCMTask(BaseBuildTask):
>               raise koji.BuildError, "Multiple srpms found in %s: %s" % (sourcedir, ", ".join(srpms))
>           else:
>               srpm = srpms[0]
> -
> +
>           # check srpm name
>           h = koji.get_rpm_header(srpm)
>           name = h[rpm.RPMTAG_NAME]
> @@ -3844,7 +3844,7 @@ class BuildSRPMFromSCMTask(BaseBuildTask):
>           broot.expire()
>
>           return {'srpm': "%s/%s" % (uploadpath, srpm_name),
> -                'logs': ["%s/%s" % (uploadpath, os.path.basename(f))
> +                'logs': ["%s/%s" % (uploadpath, os.path.basename(f))
>                                           for f in log_files],
>                   'brootid': brootid,
>                  }
> @@ -3969,16 +3969,16 @@ Build Info: %(weburl)s/buildinfo?buildID=%(build_id)i\r
>           if not data:
>               data = {}
>           taskinfo = self.session.getTaskInfo(task_id)
> -
> +
>           if not taskinfo:
>               # invalid task_id
>               return data
> -
> +
>           if taskinfo['host_id']:
>               hostinfo = self.session.getHost(taskinfo['host_id'])
>           else:
>               hostinfo = None
> -
> +
>           result = None
>           try:
>               result = self.session.getTaskResult(task_id)
> @@ -3994,17 +3994,17 @@ Build Info: %(weburl)s/buildinfo?buildID=%(build_id)i\r
>               sys.exc_clear()
>           if not result:
>               result = 'Unknown'
> -
> +
>           files = self.session.listTaskOutput(task_id)
>           logs = [filename for filename in files if filename.endswith('.log')]
>           rpms = [filename for filename in files if filename.endswith('.rpm') and not filename.endswith('.src.rpm')]
>           srpms = [filename for filename in files if filename.endswith('.src.rpm')]
>           misc = [filename for filename in files if filename not in logs + rpms + srpms]
> -
> +
>           logs.sort()
>           rpms.sort()
>           misc.sort()
> -
> +
>           data[task_id] = {}
>           data[task_id]['id'] = taskinfo['id']
>           data[task_id]['method'] = taskinfo['method']
> @@ -4018,7 +4018,7 @@ Build Info: %(weburl)s/buildinfo?buildID=%(build_id)i\r
>           data[task_id]['rpms'] = rpms
>           data[task_id]['srpms'] = srpms
>           data[task_id]['misc'] = misc
> -
> +
>           children = self.session.getTaskChildren(task_id)
>           for child in children:
>               data = self._getTaskData(child['id'], data)
> @@ -4057,7 +4057,7 @@ Build Info: %(weburl)s/buildinfo?buildID=%(build_id)i\r
>           elif build['state'] == koji.BUILD_STATES['FAILED']:
>               failure_data = task_data[task_id]['result']
>               failed_hosts = ['%s (%s)' % (task['host'], task['arch']) for task in task_data.values() if task['host'] and task['state'] == 'failed']
> -            failure_info = "\r\n%s (%d) failed on %s:\r\n  %s" % (build_nvr, build_id,
> +            failure_info = "\r\n%s (%d) failed on %s:\r\n  %s" % (build_nvr, build_id,
>                                                                     ', '.join(failed_hosts),
>                                                                     failure_data)
>
> @@ -4066,14 +4066,14 @@ Build Info: %(weburl)s/buildinfo?buildID=%(build_id)i\r
>           tasks = {'failed' : [task for task in task_data.values() if task['state'] == 'failed'],
>                    'canceled' : [task for task in task_data.values() if task['state'] == 'canceled'],
>                    'closed' : [task for task in task_data.values() if task['state'] == 'closed']}
> -
> +
>           srpms = []
>           for taskinfo in task_data.values():
>               for srpmfile in taskinfo['srpms']:
>                   srpms.append(srpmfile)
>           srpms = self.uniq(srpms)
>           srpms.sort()
> -
> +
>           if srpms:
>               output = "SRPMS:\r\n"
>               for srpm in srpms:
> @@ -4564,7 +4564,7 @@ if __name__ == "__main__":
>           except koji.AuthError, e:
>               quit("Error: Unable to log in: %s" % e)
>           except xmlrpclib.ProtocolError:
> -            quit("Error: Unable to connect to server %s" % (options.server))
> +            quit("Error: Unable to connect to server %s" % (options.server))
>       elif options.user:
>           try:
>               # authenticate using user/password
> diff --git a/cli/koji b/cli/koji
> index bfb0955..839f7d6 100755
> --- a/cli/koji
> +++ b/cli/koji
> @@ -6,7 +6,7 @@
>   #
>   #    Koji is free software; you can redistribute it and/or
>   #    modify it under the terms of the GNU Lesser General Public
> -#    License as published by the Free Software Foundation;
> +#    License as published by the Free Software Foundation;
>   #    version 2.1 of the License.
>   #
>   #    This software is distributed in the hope that it will be useful,
> @@ -141,7 +141,7 @@ def get_options():
>       parser.add_option("--debug-xmlrpc", action="store_true", default=False,
>                         help=_("show xmlrpc debug output"))
>       parser.add_option("-q", "--quiet", action="store_true", default=False,
> -		      help=_("run quietly"))
> +                      help=_("run quietly"))
>       parser.add_option("--skip-main", action="store_true", default=False,
>                         help=_("don't actually run main"))
>       parser.add_option("-s", "--server", help=_("url of XMLRPC server"))
> @@ -205,7 +205,7 @@ def get_options():
>           'krbservice': 'host',
>           'cert': '~/.koji/client.crt',
>           'ca': '~/.koji/clientca.crt',
> -        'serverca': '~/.koji/serverca.crt',
> +        'serverca': '~/.koji/serverca.crt',
>           'authtype': None
>           }
>       #note: later config files override earlier ones
> @@ -263,7 +263,7 @@ def get_options():
>           # expand paths here, so we don't have to worry about it later
>           value = os.path.expanduser(getattr(options, name))
>           setattr(options, name, value)
> -
> +
>       #honor topdir
>       if options.topdir:
>           koji.BASEDIR = options.topdir
> @@ -427,7 +427,7 @@ def display_task_results(tasks):
>       for task in [task for task in tasks.values() if task.level == 0]:
>           state = task.info['state']
>           task_label = task.str()
> -
> +
>           if state == koji.TASK_STATES['CLOSED']:
>               print '%s completed successfully' % task_label
>           elif state == koji.TASK_STATES['FAILED']:
> @@ -526,7 +526,7 @@ def watch_logs(session, tasklist, opts):
>                       while contents:
>                           if not taskoffsets.has_key(log):
>                               taskoffsets[log] = 0
> -
> +
>                           contents = session.downloadTaskOutput(task_id, log, taskoffsets[log], 16384)
>                           taskoffsets[log] += len(contents)
>                           if contents:
> @@ -556,7 +556,7 @@ def handle_add_group(options, session, args):
>           assert False
>       tag = args[0]
>       group = args[1]
> -
> +
>       activate_session(session)
>       if not session.hasPerm('admin'):
>           print "This action requires admin privileges"
> @@ -566,7 +566,7 @@ def handle_add_group(options, session, args):
>       if not dsttag:
>           print "Unknown tag: %s" % tag
>           return 1
> -
> +
>       groups = dict([(p['name'], p['group_id']) for p in session.getTagGroups(tag, inherit=False)])
>       group_id = groups.get(group, None)
>       if group_id is not None:
> @@ -574,7 +574,7 @@ def handle_add_group(options, session, args):
>           return 1
>
>       session.groupListAdd(tag, group)
> -
> +
>   def handle_add_host(options, session, args):
>       "[admin] Add a host"
>       usage = _("usage: %prog add-host [options] hostname arch [arch2 ...]")
> @@ -694,7 +694,7 @@ def handle_remove_host_from_channel(options, session, args):
>       if channel not in hostchannels:
>           print "Host %s is not a member of channel %s" % (host, channel)
>           return 1
> -
> +
>       session.removeHostFromChannel(host, channel)
>
>   def handle_remove_channel(options, session, args):
> @@ -903,7 +903,7 @@ def handle_build(options, session, args):
>           parser.error(_("Exactly two arguments (a build target and a SCM URL or srpm file) are required"))
>           assert False
>       if build_opts.arch_override and not build_opts.scratch:
> -            parser.error(_("--arch_override is only allowed for --scratch builds"))
> +        parser.error(_("--arch_override is only allowed for --scratch builds"))
>       activate_session(session)
>       target = args[0]
>       if target.lower() == "none" and build_opts.repo_id:
> @@ -987,7 +987,7 @@ def handle_chain_build(options, session, args):
>           return 1
>
>       sources = args[1:]
> -
> +
>       src_list = []
>       build_level = []
>       #src_lists is a list of lists of sources to build.
> @@ -1017,7 +1017,7 @@ def handle_chain_build(options, session, args):
>       if build_opts.background:
>           #relative to koji.PRIO_DEFAULT
>           priority = 5
> -
> +
>       task_id = session.chainBuild(src_list, target, priority=priority)
>
>       print "Created task:", task_id
> @@ -2534,7 +2534,7 @@ def anon_handle_latest_build(options, session, args):
>                       print "%-40s  %-20s  %s" % ("Build","Tag","Built by")
>                       print "%s  %s  %s" % ("-"*40, "-"*20, "-"*16)
>                   options.quiet = True
> -
> +
>           output = [ fmt % x for x in data]
>           output.sort()
>           for line in output:
> @@ -2927,7 +2927,7 @@ def anon_handle_list_hosts(options, session, args):
>       for host in hosts:
>           session.getLastHostUpdate(host['id'])
>       updateList = session.multiCall()
> -
> +
>       for host, [update] in zip(hosts, updateList):
>           if update is None:
>               host['update'] = '-'
> @@ -3166,12 +3166,12 @@ def handle_clone_tag(options, session, args):
>       activate_session(session)
>
>       if not session.hasPerm('admin') and not options.test:
> -       print "This action requires admin privileges"
> -       return
> +        print "This action requires admin privileges"
> +        return
>
>       if args[0] == args[1]:
>           sys.stdout.write('Source and destination tags must be different.\n')
> -        return
> +        return
>       # store tags.
>       srctag = session.getTag(args[0])
>       dsttag = session.getTag(args[1])
> @@ -3433,7 +3433,7 @@ def handle_add_target(options, session, args):
>       if not session.hasPerm('admin'):
>           print "This action requires admin privileges"
>           return 1
> -
> +
>       chkbuildtag = session.getTag(build_tag)
>       chkdesttag = session.getTag(dest_tag)
>       if not chkbuildtag:
> @@ -3445,7 +3445,7 @@ def handle_add_target(options, session, args):
>       if not chkdesttag:
>           print "Destination tag does not exist: %s" % dest_tag
>           return 1
> -
> +
>       session.createBuildTarget(name, build_tag, dest_tag)
>
>   def handle_edit_target(options, session, args):
> @@ -3509,13 +3509,13 @@ def handle_remove_target(options, session, args):
>       if not session.hasPerm('admin'):
>           print "This action requires admin privileges"
>           return
> -
> +
>       target = args[0]
>       target_info = session.getBuildTarget(target)
>       if not target_info:
>           print "Build target %s does not exist" % target
>           return 1
> -
> +
>       session.deleteBuildTarget(target_info['id'])
>
>   def handle_remove_tag(options, session, args):
> @@ -4680,7 +4680,7 @@ def handle_edit_tag_inheritance(options, session, args):
>               return 1
>           print _("Error: Key constraints may be broken.  Exiting.")
>           return 1
> -
> +
>       # len(data) == 1
>       data = data[0]
>
> @@ -5101,7 +5101,7 @@ def handle_image_build_indirection(options, session, args):
>       usage += _("\n       %prog image-build --config FILE")
>       usage += _("\n\n(Specify the --help global option for a list of other " +
>                  "help options)")
> -    parser = OptionParser(usage=usage)
> +    parser = OptionParser(usage=usage)
>       parser.add_option("--config",
>           help=_("Use a configuration file to define image-build options " +
>                  "instead of command line options (they will be ignored)."))
> @@ -5151,19 +5151,19 @@ def _build_image_indirection(options, task_opts, session, args):
>       """
>
>       # Do some sanity checks before even attempting to create the session
> -    if not (bool(task_opts.utility_image_task) !=
> +    if not (bool(task_opts.utility_image_task) !=
>               bool(task_opts.utility_image_build)):
>           raise koji.GenericError, _("You must specify either a utility-image task or build ID/NVR")
>
> -    if not (bool(task_opts.base_image_task) !=
> +    if not (bool(task_opts.base_image_task) !=
>               bool(task_opts.base_image_build)):
>           raise koji.GenericError, _("You must specify either a base-image task or build ID/NVR")
>
>       required_opts = [ 'name', 'version', 'arch', 'target', 'indirection_template', 'results_loc' ]
>       optional_opts = [ 'indirection_template_url', 'scratch', 'utility_image_task', 'utility_image_build',
> -                      'base_image_task', 'base_image_build', 'release', 'skip_tag' ]
> +                      'base_image_task', 'base_image_build', 'release', 'skip_tag' ]
>
> -    missing = [ ]
> +    missing = [ ]
>       for opt in required_opts:
>           if not getattr(task_opts, opt, None):
>               missing.append(opt)
> @@ -5909,7 +5909,7 @@ def handle_move_build(opts, session, args):
>       activate_session(session)
>       tasks = []
>       builds = []
> -
> +
>       if options.all:
>           for arg in args[2:]:
>               pkg = session.getPackage(arg)
> @@ -5923,10 +5923,10 @@ def handle_move_build(opts, session, args):
>               build = session.getBuild(arg)
>               if not build:
>                   print _("Invalid build %s, skipping." % arg)
> -                continue
> +                continue
>               if not build in builds:
>                   builds.append(build)
> -
> +
>           for build in builds:
>               task_id = session.moveBuild(args[0], args[1], build['id'], options.force)
>               tasks.append(task_id)
> @@ -6045,7 +6045,7 @@ def anon_handle_download_build(options, session, args):
>       elif len(args) > 1:
>           parser.error(_("Only a single package N-V-R or build ID may be specified"))
>           assert False
> -
> +
>       activate_session(session)
>       build = args[0]
>
> @@ -6060,7 +6060,7 @@ def anon_handle_download_build(options, session, args):
>                   print "No associated builds for task %s" % build
>                   return 1
>               build = builds[0]['build_id']
> -
> +
>       if suboptions.latestfrom:
>           # We want the latest build, not a specific build
>           try:
> @@ -6074,7 +6074,7 @@ def anon_handle_download_build(options, session, args):
>           info = builds[0]
>       else:
>           info = session.getBuild(build)
> -
> +
>       if info is None:
>           print "No such build: %s" % build
>           return 1
> @@ -6134,7 +6134,7 @@ def anon_handle_download_build(options, session, args):
>           pg = None
>       else:
>           pg = progress.TextMeter()
> -
> +
>       for url, relpath in urls:
>           file = grabber.urlopen(url, progress_obj=pg, text=relpath)
>
> diff --git a/hub/kojihub.py b/hub/kojihub.py
> index 9decf7c..3cb9648 100644
> --- a/hub/kojihub.py
> +++ b/hub/kojihub.py
> @@ -5,7 +5,7 @@
>   #
>   #    Koji is free software; you can redistribute it and/or
>   #    modify it under the terms of the GNU Lesser General Public
> -#    License as published by the Free Software Foundation;
> +#    License as published by the Free Software Foundation;
>   #    version 2.1 of the License.
>   #
>   #    This software is distributed in the hope that it will be useful,
> @@ -3442,8 +3442,8 @@ def list_rpms(buildID=None, buildrootID=None, imageID=None, componentBuildrootID
>
>       # image specific constraints
>       if imageID != None:
> -       clauses.append('image_listing.image_id = %(imageID)i')
> -       joins.append('image_listing ON rpminfo.id = image_listing.rpm_id')
> +        clauses.append('image_listing.image_id = %(imageID)i')
> +        joins.append('image_listing ON rpminfo.id = image_listing.rpm_id')
>
>       if hostID != None:
>           joins.append('buildroot ON rpminfo.buildroot_id = buildroot.id')
> @@ -3553,7 +3553,7 @@ def list_archives(buildID=None, buildrootID=None, componentBuildrootID=None, hos
>       checksum_type: the checksum type (integer)
>
>       If componentBuildrootID is specified, then the map will also contain the following key:
> -    project: whether the archive was pulled in as a project dependency, or as part of the
> +    project: whether the archive was pulled in as a project dependency, or as part of the
>                build environment setup (boolean)
>
>       If 'type' is specified, then the archives listed will be limited
> @@ -3590,7 +3590,7 @@ def list_archives(buildID=None, buildrootID=None, componentBuildrootID=None, hos
>       an empty list is returned.
>       """
>       values = {}
> -
> +
>       tables = ['archiveinfo']
>       joins = ['archivetypes on archiveinfo.type_id = archivetypes.id']
>       fields = [('archiveinfo.id', 'id'),
> @@ -5949,7 +5949,7 @@ def get_notification_recipients(build, tag_id, state):
>       for this tag and the user who submitted the build.  The list will not contain
>       duplicates.
>       """
> -
> +
>       clauses = []
>
>       if build:
> @@ -7542,7 +7542,7 @@ class RootExports(object):
>           """
>           Import an archive file and associate it with a build.  The archive can
>           be any non-rpm filetype supported by Koji.
> -
> +
>           filepath: path to the archive file (relative to the Koji workdir)
>           buildinfo: information about the build to associate the archive with
>                      May be a string (NVR), integer (buildID), or dict (containing keys: name, version, release)
> @@ -8557,7 +8557,7 @@ class RootExports(object):
>               raise koji.GenericError, 'user already exists: %s' % username
>           if krb_principal and get_user(krb_principal):
>               raise koji.GenericError, 'user with this Kerberos principal already exists: %s' % krb_principal
> -
> +
>           return context.session.createUser(username, status=status, krb_principal=krb_principal)
>
>       def enableUser(self, username):
> @@ -8566,14 +8566,14 @@ class RootExports(object):
>           if not user:
>               raise koji.GenericError, 'unknown user: %s' % username
>           set_user_status(user, koji.USER_STATUS['NORMAL'])
> -
> +
>       def disableUser(self, username):
>           """Disable logins by the specified user"""
>           user = get_user(username)
>           if not user:
>               raise koji.GenericError, 'unknown user: %s' % username
>           set_user_status(user, koji.USER_STATUS['BLOCKED'])
> -
> +
>       #group management calls
>       newGroup = staticmethod(new_group)
>       addGroupMember = staticmethod(add_group_member)
> @@ -9223,11 +9223,11 @@ class RootExports(object):
>           notificationUser = self.getUser(user_id)
>           if not notificationUser:
>               raise koji.GenericError, 'invalid user ID: %s' % user_id
> -
> +
>           if not (notificationUser['id'] == currentUser['id'] or self.hasPerm('admin')):
>               raise koji.GenericError, 'user %s cannot create notifications for user %s' % \
>                     (currentUser['name'], notificationUser['name'])
> -
> +
>           email = '%s@%s' % (notificationUser['name'], context.opts['EmailDomain'])
>           insert = """INSERT INTO build_notifications
>           (user_id, package_id, tag_id, success_only, email)
> @@ -10076,7 +10076,7 @@ class HostExports(object):
>               if len(poms) == 0:
>                   pass
>               elif len(poms) == 1:
> -                # This directory has a .pom file, so get the Maven group_id,
> +                # This directory has a .pom file, so get the Maven group_id,
>                   # artifact_id, and version from it and associate those with
>                   # the artifacts in this directory
>                   pom_path = os.path.join(maven_task_dir, relpath, poms[0])
> @@ -10317,7 +10317,7 @@ class HostExports(object):
>
>       def importImage(self, task_id, build_id, results):
>           """
> -        Import a built image, populating the database with metadata and
> +        Import a built image, populating the database with metadata and
>           moving the image to its final location.
>           """
>           for sub_results in results.values():
> diff --git a/hub/kojixmlrpc.py b/hub/kojixmlrpc.py
> index 67cb8ee..0e51012 100644
> --- a/hub/kojixmlrpc.py
> +++ b/hub/kojixmlrpc.py
> @@ -3,7 +3,7 @@
>   #
>   #    Koji is free software; you can redistribute it and/or
>   #    modify it under the terms of the GNU Lesser General Public
> -#    License as published by the Free Software Foundation;
> +#    License as published by the Free Software Foundation;
>   #    version 2.1 of the License.
>   #
>   #    This software is distributed in the hope that it will be useful,
> @@ -292,7 +292,7 @@ class ModXMLRPCRequestHandler(object):
>           if context.opts.get('LockOut') and \
>               context.method not in ('login', 'krbLogin', 'sslLogin', 'logout') and \
>               not context.session.hasPerm('admin'):
> -                raise koji.ServerOffline, "Server disabled for maintenance"
> +            raise koji.ServerOffline, "Server disabled for maintenance"
>
>       def _dispatch(self, method, params):
>           func = self._get_handler(method)
> @@ -569,7 +569,7 @@ def get_policy(opts, plugins):
>                           if pname != test.policy:
>                               continue
>                       elif pname not in test.policy:
> -                            continue
> +                        continue
>                   # in case of name overlap, last one wins
>                   # hence plugins can override builtin tests
>                   merged[name] = test
> diff --git a/koji/__init__.py b/koji/__init__.py
> index d133ed1..24f0808 100644
> --- a/koji/__init__.py
> +++ b/koji/__init__.py
> @@ -5,7 +5,7 @@
>   #
>   #    Koji is free software; you can redistribute it and/or
>   #    modify it under the terms of the GNU Lesser General Public
> -#    License as published by the Free Software Foundation;
> +#    License as published by the Free Software Foundation;
>   #    version 2.1 of the License.
>   #
>   #    This software is distributed in the hope that it will be useful,
> @@ -987,7 +987,7 @@ def parse_pom(path=None, contents=None):
>           raise GenericError, 'either a path to a pom file or the contents of a pom file must be specified'
>
>       # A common problem is non-UTF8 characters in XML files, so we'll convert the string first
> -
> +
>       contents = fixEncoding(contents)
>
>       try:
> diff --git a/koji/auth.py b/koji/auth.py
> index 8e51ec7..d419d77 100644
> --- a/koji/auth.py
> +++ b/koji/auth.py
> @@ -3,7 +3,7 @@
>   #
>   #    Koji is free software; you can redistribute it and/or
>   #    modify it under the terms of the GNU Lesser General Public
> -#    License as published by the Free Software Foundation;
> +#    License as published by the Free Software Foundation;
>   #    version 2.1 of the License.
>   #
>   #    This software is distributed in the hope that it will be useful,
> @@ -247,7 +247,7 @@ class Session(object):
>           if not result:
>               raise koji.AuthError, 'invalid user_id: %s' % user_id
>           name, usertype, status = result
> -
> +
>           if status != koji.USER_STATUS['NORMAL']:
>               raise koji.AuthError, 'logins by %s are not allowed' % name
>
> @@ -394,7 +394,7 @@ class Session(object):
>                   raise koji.AuthError, '%s is not authorized to login other users' % client_dn
>           else:
>               username = client_name
> -
> +
>           cursor = context.cnx.cursor()
>           query = """SELECT id FROM users
>           WHERE name = %(username)s"""
> @@ -596,7 +596,7 @@ class Session(object):
>           """
>           if not name:
>               raise koji.GenericError, 'a user must have a non-empty name'
> -
> +
>           if usertype == None:
>               usertype = koji.USERTYPES['NORMAL']
>           elif not koji.USERTYPES.get(usertype):
> @@ -606,7 +606,7 @@ class Session(object):
>               status = koji.USER_STATUS['NORMAL']
>           elif not koji.USER_STATUS.get(status):
>               raise koji.GenericError, 'invalid status: %s' % status
> -
> +
>           cursor = context.cnx.cursor()
>           select = """SELECT nextval('users_id_seq')"""
>           cursor.execute(select, locals())
> diff --git a/koji/context.py b/koji/context.py
> index f904bed..b05e3a3 100755
> --- a/koji/context.py
> +++ b/koji/context.py
> @@ -3,7 +3,7 @@
>   #
>   #    Koji is free software; you can redistribute it and/or
>   #    modify it under the terms of the GNU Lesser General Public
> -#    License as published by the Free Software Foundation;
> +#    License as published by the Free Software Foundation;
>   #    version 2.1 of the License.
>   #
>   #    This software is distributed in the hope that it will be useful,
> diff --git a/koji/daemon.py b/koji/daemon.py
> index b9f3070..d76355b 100644
> --- a/koji/daemon.py
> +++ b/koji/daemon.py
> @@ -4,7 +4,7 @@
>   #
>   #    Koji is free software; you can redistribute it and/or
>   #    modify it under the terms of the GNU Lesser General Public
> -#    License as published by the Free Software Foundation;
> +#    License as published by the Free Software Foundation;
>   #    version 2.1 of the License.
>   #
>   #    This software is distributed in the hope that it will be useful,
> diff --git a/koji/db.py b/koji/db.py
> index f5f6104..dcd2461 100644
> --- a/koji/db.py
> +++ b/koji/db.py
> @@ -5,7 +5,7 @@
>   #
>   #    Koji is free software; you can redistribute it and/or
>   #    modify it under the terms of the GNU Lesser General Public
> -#    License as published by the Free Software Foundation;
> +#    License as published by the Free Software Foundation;
>   #    version 2.1 of the License.
>   #
>   #    This software is distributed in the hope that it will be useful,
> diff --git a/koji/plugin.py b/koji/plugin.py
> index e189d1f..cbb245e 100644
> --- a/koji/plugin.py
> +++ b/koji/plugin.py
> @@ -3,7 +3,7 @@
>   #
>   #    Koji is free software; you can redistribute it and/or
>   #    modify it under the terms of the GNU Lesser General Public
> -#    License as published by the Free Software Foundation;
> +#    License as published by the Free Software Foundation;
>   #    version 2.1 of the License.
>   #
>   #    This software is distributed in the hope that it will be useful,
> diff --git a/koji/policy.py b/koji/policy.py
> index 47e7237..653f414 100644
> --- a/koji/policy.py
> +++ b/koji/policy.py
> @@ -2,7 +2,7 @@
>   #
>   #    Koji is free software; you can redistribute it and/or
>   #    modify it under the terms of the GNU Lesser General Public
> -#    License as published by the Free Software Foundation;
> +#    License as published by the Free Software Foundation;
>   #    version 2.1 of the License.
>   #
>   #    This software is distributed in the hope that it will be useful,
> @@ -368,4 +368,3 @@ def findSimpleTests(namespace):
>                   ret.setdefault(name, value)
>                   #...so first test wins in case of name overlap
>       return ret
> -
> diff --git a/koji/server.py b/koji/server.py
> index 7d9ed3e..7cc8be8 100644
> --- a/koji/server.py
> +++ b/koji/server.py
> @@ -187,4 +187,3 @@ class InputWrapper(object):
>           while line:
>               yield line
>               line = self.readline()
> -
> diff --git a/koji/ssl/SSLCommon.py b/koji/ssl/SSLCommon.py
> index 5cb722d..0d3fb94 100644
> --- a/koji/ssl/SSLCommon.py
> +++ b/koji/ssl/SSLCommon.py
> @@ -139,4 +139,3 @@ class PlgHTTPS(httplib.HTTP):
>
>       def __init__(self, host='', port=None, ssl_context=None, strict=None, timeout=None):
>           self._setup(self._connection_class(host, port, ssl_context, strict, timeout))
> -
> diff --git a/koji/ssl/SSLConnection.py b/koji/ssl/SSLConnection.py
> index 1bb9e76..5a45095 100644
> --- a/koji/ssl/SSLConnection.py
> +++ b/koji/ssl/SSLConnection.py
> @@ -156,4 +156,3 @@ class PlgFileObject(socket._fileobject):
>                   self._sock.close()
>           finally:
>               self._sock = None
> -
> diff --git a/koji/ssl/XMLRPCServerProxy.py b/koji/ssl/XMLRPCServerProxy.py
> index 40b174d..16de619 100644
> --- a/koji/ssl/XMLRPCServerProxy.py
> +++ b/koji/ssl/XMLRPCServerProxy.py
> @@ -176,4 +176,3 @@ if __name__ == '__main__':
>           except KeyboardInterrupt:
>               os._exit(0)
>       print "All done. (%d timed out)" % tm.get()
> -
> diff --git a/koji/tasks.py b/koji/tasks.py
> index 46a7099..0d9a003 100644
> --- a/koji/tasks.py
> +++ b/koji/tasks.py
> @@ -4,7 +4,7 @@
>   #
>   #    Koji is free software; you can redistribute it and/or
>   #    modify it under the terms of the GNU Lesser General Public
> -#    License as published by the Free Software Foundation;
> +#    License as published by the Free Software Foundation;
>   #    version 2.1 of the License.
>   #
>   #    This software is distributed in the hope that it will be useful,
> diff --git a/koji/util.py b/koji/util.py
> index e7c95a7..80e511f 100644
> --- a/koji/util.py
> +++ b/koji/util.py
> @@ -2,7 +2,7 @@
>   #
>   #    Koji is free software; you can redistribute it and/or
>   #    modify it under the terms of the GNU Lesser General Public
> -#    License as published by the Free Software Foundation;
> +#    License as published by the Free Software Foundation;
>   #    version 2.1 of the License.
>   #
>   #    This software is distributed in the hope that it will be useful,
> diff --git a/plugins/messagebus.py b/plugins/messagebus.py
> index a23bc94..4ebf806 100644
> --- a/plugins/messagebus.py
> +++ b/plugins/messagebus.py
> @@ -22,19 +22,19 @@ session = None
>   target = None
>
>   def connect_timeout(host, port, timeout):
> -  for res in socket.getaddrinfo(host, port, 0, socket.SOCK_STREAM):
> -    af, socktype, proto, canonname, sa = res
> -    sock = socket.socket(af, socktype, proto)
> -    sock.settimeout(timeout)
> -    try:
> -      sock.connect(sa)
> -      break
> -    except socket.error, msg:
> -      sock.close()
> -  else:
> -    # If we got here then we couldn't connect (yet)
> -    raise
> -  return sock
> +    for res in socket.getaddrinfo(host, port, 0, socket.SOCK_STREAM):
> +        af, socktype, proto, canonname, sa = res
> +        sock = socket.socket(af, socktype, proto)
> +        sock.settimeout(timeout)
> +        try:
> +            sock.connect(sa)
> +            break
> +        except socket.error, msg:
> +            sock.close()
> +    else:
> +        # If we got here then we couldn't connect (yet)
> +        raise
> +    return sock
>
>   class tlstimeout(qpid.messaging.transports.tls):
>       def __init__(self, conn, host, port):
> diff --git a/plugins/runroot.py b/plugins/runroot.py
> index 427d483..86b6892 100644
> --- a/plugins/runroot.py
> +++ b/plugins/runroot.py
> @@ -319,5 +319,3 @@ class RunRootTask(tasks.BaseTaskHandler):
>                   os.unlink(fn)
>               except OSError:
>                   pass
> -
> -
> diff --git a/util/koji-gc b/util/koji-gc
> index 871c7f8..2d61aa4 100755
> --- a/util/koji-gc
> +++ b/util/koji-gc
> @@ -957,4 +957,3 @@ if __name__ == "__main__":
>           pass
>       if not options.skip_main:
>           sys.exit(rv)
> -
> diff --git a/util/koji-shadow b/util/koji-shadow
> index cdeef8c..3b62776 100755
> --- a/util/koji-shadow
> +++ b/util/koji-shadow
> @@ -1328,4 +1328,3 @@ if __name__ == "__main__":
>       except:
>           pass
>       sys.exit(rv)
> -
> diff --git a/util/kojira b/util/kojira
> index fe827be..c18f63b 100755
> --- a/util/kojira
> +++ b/util/kojira
> @@ -5,7 +5,7 @@
>   #
>   #    Koji is free software; you can redistribute it and/or
>   #    modify it under the terms of the GNU Lesser General Public
> -#    License as published by the Free Software Foundation;
> +#    License as published by the Free Software Foundation;
>   #    version 2.1 of the License.
>   #
>   #    This software is distributed in the hope that it will be useful,
> @@ -130,7 +130,7 @@ class ManagedRepo(object):
>           if not tag_info:
>               tag_info = getTag(self.session, self.tag_id, self.event_id)
>           if not tag_info:
> -            self.logger.warn('Could not get info for tag %i, skipping delete of repo %i' %
> +            self.logger.warn('Could not get info for tag %i, skipping delete of repo %i' %
>                                (self.tag_id, self.repo_id))
>               return False
>           tag_name = tag_info['name']
> diff --git a/vm/kojikamid.py b/vm/kojikamid.py
> index c142267..15c0570 100755
> --- a/vm/kojikamid.py
> +++ b/vm/kojikamid.py
> @@ -6,7 +6,7 @@
>   #
>   #    Koji is free software; you can redistribute it and/or
>   #    modify it under the terms of the GNU Lesser General Public
> -#    License as published by the Free Software Foundation;
> +#    License as published by the Free Software Foundation;
>   #    version 2.1 of the License.
>   #
>   #    This software is distributed in the hope that it will be useful,
> @@ -276,7 +276,7 @@ class WindowsBuild(object):
>                   continue
>               tokens = entry.split(':')
>               filename = tokens[0]
> -            for var in ('name', 'version', 'release'):
> +            for var in ('name', 'version', 'release'):
>                   filename = filename.replace('$' + var, getattr(self, var))
>               metadata = {}
>               metadata['platforms'] = tokens[1].split(',')
> @@ -589,7 +589,7 @@ def get_mgmt_server():
>                    macaddr, gateway, MANAGER_PORT)
>       server = xmlrpclib.ServerProxy('http://%s:%s/' %
>                                      (gateway, MANAGER_PORT), allow_none=True)
> -    # we would set a timeout on the socket here, but that is apparently not
> +    # we would set a timeout on the socket here, but that is apparently not
>       # supported by python/cygwin/Windows
>       task_port = server.getPort(macaddr)
>       logger.debug('found task-specific port %s', task_port)
> diff --git a/www/kojiweb/index.py b/www/kojiweb/index.py
> index ff15a5f..4be6131 100644
> --- a/www/kojiweb/index.py
> +++ b/www/kojiweb/index.py
> @@ -286,7 +286,7 @@ def index(environ, packageOrder='package_name', packageStart=None):
>       if user:
>           packages = kojiweb.util.paginateResults(server, values, 'listPackages', kw={'userID': user['id'], 'with_dups': True},
>                                                   start=packageStart, dataName='packages', prefix='package', order=packageOrder, pageSize=10)
> -
> +
>           notifs = server.getBuildNotifications(user['id'])
>           notifs.sort(kojiweb.util.sortByKeyFunc('id'))
>           # XXX Make this a multicall
> @@ -294,21 +294,21 @@ def index(environ, packageOrder='package_name', packageStart=None):
>               notif['package'] = None
>               if notif['package_id']:
>                   notif['package'] = server.getPackage(notif['package_id'])
> -
> +
>               notif['tag'] = None
>               if notif['tag_id']:
>                   notif['tag'] = server.getTag(notif['tag_id'])
>           values['notifs'] = notifs
> -
> +
>       values['user'] = user
>       values['welcomeMessage'] = environ['koji.options']['KojiGreeting']
> -
> +
>       return _genHTML(environ, 'index.chtml')
>
>   def notificationedit(environ, notificationID):
>       server = _getServer(environ)
>       _assertLogin(environ)
> -
> +
>       notificationID = int(notificationID)
>       notification = server.getBuildNotification(notificationID)
>       if notification == None:
> @@ -399,7 +399,7 @@ def notificationcreate(environ):
>   def notificationdelete(environ, notificationID):
>       server = _getServer(environ)
>       _assertLogin(environ)
> -
> +
>       notificationID = int(notificationID)
>       notification = server.getBuildNotification(notificationID)
>       if not notification:
> @@ -491,7 +491,7 @@ def tasks(environ, owner=None, state='active', view='tree', method='all', hostID
>
>       if view in ('tree', 'toplevel'):
>           opts['parent'] = None
> -
> +
>       if state == 'active':
>           opts['state'] = [koji.TASK_STATES['FREE'], koji.TASK_STATES['OPEN'], koji.TASK_STATES['ASSIGNED']]
>       elif state == 'all':
> @@ -531,7 +531,7 @@ def tasks(environ, owner=None, state='active', view='tree', method='all', hostID
>
>       tasks = kojiweb.util.paginateMethod(server, values, 'listTasks', kw={'opts': opts},
>                                           start=start, dataName='tasks', prefix='task', order=order)
> -
> +
>       if view == 'tree':
>           server.multicall = True
>           for task in tasks:
> @@ -577,7 +577,7 @@ def taskinfo(environ, taskID):
>           values['parent'] = parent
>       else:
>           values['parent'] = None
> -
> +
>       descendents = server.getTaskDescendents(task['id'], request=True)
>       values['descendents'] = descendents
>
> @@ -641,7 +641,7 @@ def taskinfo(environ, taskID):
>               values['wrapTask'] = wrapTask
>       elif task['method'] == 'restartVerify':
>           values['rtask'] = server.getTaskInfo(params[0], request=True)
> -
> +
>       if task['state'] in (koji.TASK_STATES['CLOSED'], koji.TASK_STATES['FAILED']):
>           try:
>               result = server.getTaskResult(task['id'])
> @@ -688,7 +688,7 @@ def taskstatus(environ, taskID):
>   def resubmittask(environ, taskID):
>       server = _getServer(environ)
>       _assertLogin(environ)
> -
> +
>       taskID = int(taskID)
>       newTaskID = server.resubmitTask(taskID)
>       _redirect(environ, 'taskinfo?taskID=%i' % newTaskID)
> @@ -817,13 +817,13 @@ def packages(environ, tagID=None, userID=None, order='package_name', start=None,
>       values['prefix'] = prefix
>       inherited = int(inherited)
>       values['inherited'] = inherited
> -
> +
>       packages = kojiweb.util.paginateResults(server, values, 'listPackages',
>                                               kw={'tagID': tagID, 'userID': userID, 'prefix': prefix, 'inherited': bool(inherited)},
>                                               start=start, dataName='packages', prefix='package', order=order)
> -
> +
>       values['chars'] = _PREFIX_CHARS
> -
> +
>       return _genHTML(environ, 'packages.chtml')
>
>   def packageinfo(environ, packageID, tagOrder='name', tagStart=None, buildOrder='-completion_time', buildStart=None):
> @@ -840,7 +840,7 @@ def packageinfo(environ, packageID, tagOrder='name', tagStart=None, buildOrder='
>
>       values['package'] = package
>       values['packageID'] = package['id']
> -
> +
>       tags = kojiweb.util.paginateMethod(server, values, 'listTags', kw={'package': package['id']},
>                                          start=tagStart, dataName='tags', prefix='tag', order=tagOrder)
>       builds = kojiweb.util.paginateMethod(server, values, 'listBuilds', kw={'packageID': package['id']},
> @@ -966,7 +966,7 @@ def tagedit(environ, tagID):
>               params['maven_include_all'] = bool(form.has_key('maven_include_all'))
>
>           server.editTag2(tag['id'], **params)
> -
> +
>           _redirect(environ, 'taginfo?tagID=%i' % tag['id'])
>       elif form.has_key('cancel'):
>           _redirect(environ, 'taginfo?tagID=%i' % tag['id'])
> @@ -1016,7 +1016,7 @@ def tagparent(environ, tagID, parentID, action):
>
>               data = server.getInheritanceData(tag['id'])
>               data.append(newDatum)
> -
> +
>               server.setInheritanceData(tag['id'], data)
>           elif form.has_key('cancel'):
>               pass
> @@ -1039,7 +1039,7 @@ def tagparent(environ, tagID, parentID, action):
>                   values['inheritanceData'] = inheritanceData[0]
>               else:
>                   raise koji.GenericError, 'tag %i has tag %i listed as a parent more than once' % (tag['id'], parent['id'])
> -
> +
>               return _genHTML(environ, 'tagparent.chtml')
>       elif action == 'remove':
>           data = server.getInheritanceData(tag['id'])
> @@ -1076,7 +1076,7 @@ def buildinfo(environ, buildID):
>       server = _getServer(environ)
>
>       buildID = int(buildID)
> -
> +
>       build = server.getBuild(buildID)
>
>       values['title'] = koji.buildLabel(build) + ' | Build Info'
> @@ -1170,7 +1170,7 @@ def buildinfo(environ, buildID):
>       values['imagebuild'] = imagebuild
>       values['archives'] = archives
>       values['archivesByExt'] = archivesByExt
> -
> +
>       values['noarch_log_dest'] = noarch_log_dest
>       if environ['koji.currentUser']:
>           values['perms'] = server.getUserPerms(environ['koji.currentUser']['id'])
> @@ -1243,7 +1243,7 @@ def builds(environ, userID=None, tagID=None, packageID=None, state=None, order='
>       if prefix not in _PREFIX_CHARS:
>           prefix = None
>       values['prefix'] = prefix
> -
> +
>       values['order'] = order
>       if type in ('maven', 'win', 'image'):
>           pass
> @@ -1274,7 +1274,7 @@ def builds(environ, userID=None, tagID=None, packageID=None, state=None, order='
>                                                                                  'type': type,
>                                                                                  'state': state, 'prefix': prefix},
>                                                start=start, dataName='builds', prefix='build', order=order)
> -
> +
>       values['chars'] = _PREFIX_CHARS
>
>       return _genHTML(environ, 'builds.chtml')
> @@ -1295,7 +1295,7 @@ def users(environ, order='name', start=None, prefix=None):
>                                           start=start, dataName='users', prefix='user', order=order)
>
>       values['chars'] = _PREFIX_CHARS
> -
> +
>       return _genHTML(environ, 'users.chtml')
>
>   def userinfo(environ, userID, packageOrder='package_name', packageStart=None, buildOrder='-completion_time', buildStart=None):
> @@ -1314,10 +1314,10 @@ def userinfo(environ, userID, packageOrder='package_name', packageStart=None, bu
>
>       packages = kojiweb.util.paginateResults(server, values, 'listPackages', kw={'userID': user['id'], 'with_dups': True},
>                                               start=packageStart, dataName='packages', prefix='package', order=packageOrder, pageSize=10)
> -
> +
>       builds = kojiweb.util.paginateMethod(server, values, 'listBuilds', kw={'userID': user['id']},
>                                            start=buildStart, dataName='builds', prefix='build', order=buildOrder, pageSize=10)
> -
> +
>       return _genHTML(environ, 'userinfo.chtml')
>
>   def rpminfo(environ, rpmID, fileOrder='name', fileStart=None, buildrootOrder='-id', buildrootStart=None):
> @@ -1360,7 +1360,7 @@ def rpminfo(environ, rpmID, fileOrder='name', fileStart=None, buildrootOrder='-i
>       values['build'] = build
>       values['builtInRoot'] = builtInRoot
>       values['buildroots'] = buildroots
> -
> +
>       files = kojiweb.util.paginateMethod(server, values, 'listRPMFiles', args=[rpm['id']],
>                                           start=fileStart, dataName='files', prefix='file', order=fileOrder)
>
> @@ -1408,7 +1408,7 @@ def fileinfo(environ, filename, rpmID=None, archiveID=None):
>
>       values['rpm'] = None
>       values['archive'] = None
> -
> +
>       if rpmID:
>           rpmID = int(rpmID)
>           rpm = server.getRPM(rpmID)
> @@ -1439,7 +1439,7 @@ def fileinfo(environ, filename, rpmID=None, archiveID=None):
>   def cancelbuild(environ, buildID):
>       server = _getServer(environ)
>       _assertLogin(environ)
> -
> +
>       buildID = int(buildID)
>       build = server.getBuild(buildID)
>       if build == None:
> @@ -1468,7 +1468,7 @@ def hosts(environ, state='enabled', start=None, order='name'):
>       values['state'] = state
>
>       hosts = server.listHosts(**args)
> -
> +
>       server.multicall = True
>       for host in hosts:
>           server.getLastHostUpdate(host['id'])
> @@ -1518,7 +1518,7 @@ def hostinfo(environ, hostID=None, userID=None):
>           values['perms'] = server.getUserPerms(environ['koji.currentUser']['id'])
>       else:
>           values['perms'] = []
> -
> +
>       return _genHTML(environ, 'hostinfo.chtml')
>
>   def hostedit(environ, hostID):
> @@ -1630,7 +1630,7 @@ def buildrootinfo(environ, buildrootID, builtStart=None, builtOrder=None, compon
>
>       values['buildroot'] = buildroot
>       values['task'] = task
> -
> +
>       return _genHTML(environ, 'buildrootinfo.chtml')
>
>   def rpmlist(environ, type, buildrootID=None, imageID=None, start=None, order='nvr'):
> @@ -1714,13 +1714,13 @@ def buildtargets(environ, start=None, order='name'):
>
>       targets = kojiweb.util.paginateMethod(server, values, 'getBuildTargets',
>                                             start=start, dataName='targets', prefix='target', order=order)
> -
> +
>       values['order'] = order
>       if environ['koji.currentUser']:
>           values['perms'] = server.getUserPerms(environ['koji.currentUser']['id'])
>       else:
>           values['perms'] = []
> -
> +
>       return _genHTML(environ, 'buildtargets.chtml')
>
>   def buildtargetinfo(environ, targetID=None, name=None):
> @@ -1733,7 +1733,7 @@ def buildtargetinfo(environ, targetID=None, name=None):
>           target = server.getBuildTarget(targetID)
>       elif name != None:
>           target = server.getBuildTarget(name)
> -
> +
>       if target == None:
>           raise koji.GenericError, 'invalid build target: %s' % (targetID or name)
>
> @@ -1785,7 +1785,7 @@ def buildtargetedit(environ, targetID):
>           values = _initValues(environ, 'Edit Build Target', 'buildtargets')
>           tags = server.listTags()
>           tags.sort(_sortbyname)
> -
> +
>           values['target'] = target
>           values['tags'] = tags
>
> @@ -1810,7 +1810,7 @@ def buildtargetcreate(environ):
>
>           if target == None:
>               raise koji.GenericError, 'error creating build target "%s"' % name
> -
> +
>           _redirect(environ, 'buildtargetinfo?targetID=%i' % target['id'])
>       elif form.has_key('cancel'):
>           _redirect(environ, 'buildtargets')
> @@ -1860,7 +1860,7 @@ def buildsbyuser(environ, start=None, order='-builds'):
>           user['builds'] = numBuilds
>           if numBuilds > maxBuilds:
>               maxBuilds = numBuilds
> -
> +
>       values['order'] = order
>
>       graphWidth = 400.0
> @@ -1893,14 +1893,14 @@ def rpmsbyhost(environ, start=None, order=None, hostArch=None, rpmArch=None):
>           host['rpms'] = numRPMs
>           if numRPMs > maxRPMs:
>               maxRPMs = numRPMs
> -
> +
>       values['hostArch'] = hostArch
>       hostArchList = server.getAllArches()
>       hostArchList.sort()
>       values['hostArchList'] = hostArchList
>       values['rpmArch'] = rpmArch
>       values['rpmArchList'] = hostArchList + ['noarch', 'src']
> -
> +
>       if order == None:
>           order = '-rpms'
>       values['order'] = order
> @@ -1947,11 +1947,11 @@ def tasksbyhost(environ, start=None, order='-tasks', hostArch=None):
>       server = _getServer(environ)
>
>       maxTasks = 1
> -
> +
>       hostArchFilter = hostArch
>       if hostArchFilter == 'ix86':
>           hostArchFilter = ['i386', 'i486', 'i586', 'i686']
> -
> +
>       hosts = server.listHosts(arches=hostArchFilter)
>
>       server.multicall = True
> @@ -1963,12 +1963,12 @@ def tasksbyhost(environ, start=None, order='-tasks', hostArch=None):
>           host['tasks'] = numTasks
>           if numTasks > maxTasks:
>               maxTasks = numTasks
> -
> +
>       values['hostArch'] = hostArch
>       hostArchList = server.getAllArches()
>       hostArchList.sort()
>       values['hostArchList'] = hostArchList
> -
> +
>       values['order'] = order
>
>       graphWidth = 400.0
> @@ -1984,7 +1984,7 @@ def tasksbyuser(environ, start=None, order='-tasks'):
>       server = _getServer(environ)
>
>       maxTasks = 1
> -
> +
>       users = server.listUsers()
>
>       server.multicall = True
> @@ -1996,7 +1996,7 @@ def tasksbyuser(environ, start=None, order='-tasks'):
>           user['tasks'] = numTasks
>           if numTasks > maxTasks:
>               maxTasks = numTasks
> -
> +
>       values['order'] = order
>
>       graphWidth = 400.0
> @@ -2025,7 +2025,7 @@ def buildsbystatus(environ, days='7'):
>       server.listBuilds(completeAfter=dateAfter, state=koji.BUILD_STATES['FAILED'], taskID=-1, queryOpts={'countOnly': True})
>       server.listBuilds(completeAfter=dateAfter, state=koji.BUILD_STATES['CANCELED'], taskID=-1, queryOpts={'countOnly': True})
>       [[numSucceeded], [numFailed], [numCanceled]] = server.multiCall()
> -
> +
>       values['numSucceeded'] = numSucceeded
>       values['numFailed'] = numFailed
>       values['numCanceled'] = numCanceled
> @@ -2070,7 +2070,7 @@ def buildsbytarget(environ, days='7', start=None, order='-builds'):
>           if builds > maxBuilds:
>               maxBuilds = builds
>
> -    kojiweb.util.paginateList(values, targets.values(), start, 'targets', 'target', order)
> +    kojiweb.util.paginateList(values, targets.values(), start, 'targets', 'target', order)
>
>       values['order'] = order
>
> @@ -2140,7 +2140,7 @@ def recentbuilds(environ, user=None, tag=None, package=None):
>               task = None
>           builds[i]['task'] = task
>           builds[i]['changelog'] = clogs[i][0]
> -
> +
>       values['tag'] = tagObj
>       values['user'] = userObj
>       values['package'] = packageObj
> @@ -2197,7 +2197,7 @@ def search(environ, start=None, order='name'):
>               raise koji.GenericError, 'unknown search type: %s' % type
>           values['infoURL'] = infoURL
>           values['order'] = order
> -
> +
>           results = kojiweb.util.paginateMethod(server, values, 'search', args=(terms, type, match),
>                                                 start=start, dataName='results', prefix='result', order=order)
>           if not start and len(results) == 1:
> diff --git a/www/lib/kojiweb/util.py b/www/lib/kojiweb/util.py
> index ae00757..ebb9f49 100644
> --- a/www/lib/kojiweb/util.py
> +++ b/www/lib/kojiweb/util.py
> @@ -225,7 +225,7 @@ def passthrough_except(template, *exclude):
>       previously used
>       #attr _PASSTHROUGH = ...
>       to define the list of variable names to be passed-through.
> -    Any variables names passed in will be excluded from the
> +    Any variables names passed in will be excluded from the
>       list of variables in the output string.
>       """
>       passvars = []
> @@ -245,7 +245,7 @@ def sortByKeyFunc(key, noneGreatest=False):
>           cmpFunc = lambda a, b: (a is None or b is None) and -(cmp(a, b)) or cmp(a, b)
>       else:
>           cmpFunc = cmp
> -
> +
>       if key.startswith('-'):
>           key = key[1:]
>           sortFunc = lambda a, b: cmpFunc(b[key], a[key])
> @@ -265,7 +265,7 @@ def paginateList(values, data, start, dataName, prefix=None, order=None, noneGre
>       """
>       if order != None:
>           data.sort(sortByKeyFunc(order, noneGreatest))
> -
> +
>       totalRows = len(data)
>
>       if start:
> @@ -277,7 +277,7 @@ def paginateList(values, data, start, dataName, prefix=None, order=None, noneGre
>       count = len(data)
>
>       _populateValues(values, dataName, prefix, data, totalRows, start, count, pageSize, order)
> -
> +
>       return data
>
>   def paginateMethod(server, values, methodName, args=None, kw=None,
> @@ -294,10 +294,10 @@ def paginateMethod(server, values, methodName, args=None, kw=None,
>           start = 0
>       if not dataName:
>           raise StandardError, 'dataName must be specified'
> -
> +
>       kw['queryOpts'] = {'countOnly': True}
>       totalRows = getattr(server, methodName)(*args, **kw)
> -
> +
>       kw['queryOpts'] = {'order': order,
>                          'offset': start,
>                          'limit': pageSize}
> @@ -402,7 +402,7 @@ def formatDep(name, version, flags):
>       a human-readable format.  Copied from
>       rpmUtils/miscutils.py:formatRequires()"""
>       s = name
> -
> +
>       if flags:
>           if flags & (koji.RPMSENSE_LESS | koji.RPMSENSE_GREATER |
>                       koji.RPMSENSE_EQUAL):
> @@ -567,4 +567,3 @@ a network issue or load issues on the server."""
>       else:
>           str = "An error has occurred while processing your request."
>       return str, level
> -
>



More information about the buildsys mailing list