This file is indexed.

/usr/share/createrepo/worker.py is in createrepo 0.10.3-1.

This file is owned by root:root, with mode 0o755.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#! /usr/bin/python -tt

import sys
import yum
import createrepo
import os
import rpmUtils
import re
from optparse import OptionParser


# pass in dir to make tempdirs in
# make tempdir for this worker
# create 3 files in that tempdir
# return how many pkgs
# return on stderr where things went to hell

#TODO - take most of read_in_package from createrepo and duplicate it here
# so we can do downloads, etc.
# then replace callers of read_in_package with forked callers of this
# and reassemble at the end

def main(args):
    parser = OptionParser()
    parser.add_option('--tmpmdpath', default=None, 
                help="path where the outputs should be dumped for this worker")
    parser.add_option('--pkglist', default=None, 
                help="file to read the pkglist from in lieu of all of them on the cli")
    parser.add_option("--pkgoptions", default=[], action='append',
                help="pkgoptions in the format of key=value")
    parser.add_option("--quiet", default=False, action='store_true',
                help="only output errors and a total")
    parser.add_option("--verbose", default=False, action='store_true',
                help="output errors and a total")
    parser.add_option("--globalopts", default=[], action='append',
                help="general options in the format of key=value")

    
    opts, pkgs = parser.parse_args(args)
    external_data = {'_packagenumber': 1}
    globalopts = {}
    
    for strs in opts.pkgoptions:
        k,v = strs.split('=')
        if v in ['True', 'true', 'yes', '1', 1]:
            v = True
        elif v in ['False', 'false', 'no', '0', 0]:
            v = False
        elif v in ['None', 'none', '']:
            v = None
        external_data[k] = v

    for strs in opts.globalopts:
        k,v = strs.split('=')
        if v in ['True', 'true', 'yes', '1', 1]:
            v = True
        elif v in ['False', 'false', 'no', '0', 0]:
            v = False
        elif v in ['None', 'none', '']:
            v = None
        globalopts[k] = v

    # turn off buffering on stdout
    sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
    
    reldir = external_data['_reldir']
    ts = rpmUtils.transaction.initReadOnlyTransaction()
    if opts.tmpmdpath:
        files = [open(opts.tmpmdpath + '/%s.xml' % i, 'w')
                 for i in ('primary', 'filelists', 'other')]
        def output(*xml):
            for fh, buf in zip(files, xml):
                fh.write(buf)
    else:
        def output(*xml):
            buf = ' '.join(str(len(i)) for i in xml)
            sys.stdout.write('*** %s\n' % buf)
            for buf in xml:
                sys.stdout.write(buf)

    if opts.pkglist:
        for line in open(opts.pkglist,'r').readlines():
            line = line.strip()
            if re.match('^\s*\#.*', line) or re.match('^\s*$', line):
                continue
            pkgs.append(line)

    clog_limit=globalopts.get('clog_limit', None)
    if clog_limit is not None:
         clog_limit = int(clog_limit)
    for pkgfile in pkgs:
        pkgpath = reldir + '/' + pkgfile
        if not os.path.exists(pkgpath):
            print >> sys.stderr, "File not found: %s" % pkgpath
            output()
            continue

        try:
            if not opts.quiet and opts.verbose:
                print "reading %s" % (pkgfile)

            pkg = createrepo.yumbased.CreateRepoPackage(ts, package=pkgpath, 
                                sumtype=globalopts.get('sumtype', None), 
                                external_data=external_data)
            output(pkg.xml_dump_primary_metadata(),
                   pkg.xml_dump_filelists_metadata(),
                   pkg.xml_dump_other_metadata(clog_limit=clog_limit))
        except yum.Errors.YumBaseError, e:
            print >> sys.stderr, "Error: %s" % e
            output()
            continue
        else:
            external_data['_packagenumber']+=1
        
if __name__ == "__main__":
    main(sys.argv[1:])