extras-buildsys/utils repoconv.py,NONE,1.1

Daniel Williams (dcbw) fedora-extras-commits at redhat.com
Fri Jun 17 15:41:47 UTC 2005


Author: dcbw

Update of /cvs/fedora/extras-buildsys/utils
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv4554/utils

Added Files:
	repoconv.py 
Log Message:
2005-06-17  Dan Williams <dcbw at redhat.com>

	* utils/repoconv.py
		- Converts between flat directories of RPMs, and the buildserver repo
			format of <repo>/name/v-r/arch/package

	* server/client_manager.py
		- Accept error 61 (connection refused) and increment unavailable_count
			when we get it




--- NEW FILE repoconv.py ---
#!/usr/bin/python -t
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU Library General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

import os
import sys
import rpmUtils
import smtplib
import shutil
import string


ts = rpmUtils.transaction.initReadOnlyTransaction()


DEBUG = True

def debugprint(msg):
    if DEBUG:
        print msg
        
def find_files(path):
    """returns a dict of filetypes and paths to those files"""
    filedict = {}
    filedict['srpm'] = []
    filedict['rpm'] = []
    for root, dirs, files in os.walk(path):
        for file in files:
            # match the files to what list they should be in
            if file.endswith('.rpm'):
                if file.find('debuginfo') != -1:
                    which = 'debuginfo' 
                elif file.endswith('.src.rpm'):
                    which = 'srpm'
                else:
                    which = 'rpm'
            else:
                which = 'other'

            if which == 'srpm' or which == 'rpm':
                fullfile = os.path.join(root, file)
                filedict[which].append(fullfile)
    return filedict

def naevr(pkg):
    """return nevra from the package srpm"""

    hdr = rpmUtils.miscutils.hdrFromPackage(ts, pkg)
    name = hdr['name']
    ver = hdr['version']
    rel = hdr['release']
    arch = hdr['arch']
    epoch = hdr['epoch']
    if epoch is None:
        epoch = 0
    sourcerpm = hdr['sourcerpm']
    
    return (name, arch, epoch, ver, rel, sourcerpm)


def main(sourcedir, destdir, dest_flat):

    files = find_files(sourcedir)
    if not os.path.exists(destdir):
        os.makedirs(destdir)

    for package in files['srpm'] + files['rpm']:
        if dest_flat:
            dest_file = os.path.join(destdir, os.path.basename(package))
        else:
            (n,a,e,v,r,srpm) = naevr(package)
            t = srpm.split('-')
            srpm = t[0]
            if package.endswith('.src.rpm'):
                sub_path = os.path.join("%s" % n, "%s-%s" % (v, r))
                sub_path = os.path.join(sub_path, "SRPM")
            else:
                sub_path = os.path.join("%s" % srpm, "%s-%s" % (v, r))
                sub_path = os.path.join(sub_path, "%s" % a)
            dest_file = os.path.join(destdir, sub_path, os.path.basename(package))

        if os.path.exists(dest_file):
            debugprint('Deleting %s' % dest_file)
            os.unlink(dest_file)

        debugprint('Copying %s to %s' % (os.path.basename(package), dest_file))
	if not os.path.exists(os.path.dirname(dest_file)):
		os.makedirs(os.path.dirname(dest_file))
        shutil.copy(package, dest_file)
        
    # Create repo metadata
    print "Making Repository Metadata"
    rpdata = os.path.join(destdir, 'repodata')
    debugprint('removing tree %s' % rpdata)
    shutil.rmtree(rpdata, ignore_errors=True)
    cmd = '/usr/bin/createrepo %s' % destdir
    debugprint(cmd)
    result = os.system(cmd)

    
if __name__ == '__main__':
    me = os.getcwd()
    if len(sys.argv) < 3:
        print "Usage:\nrepoconv.py source [-flat] dest\n\n"
        sys.exit(1)

    source = sys.argv[1]
    if not os.path.exists(source):
        print "Source directory does not exist."
        sys.exit(1)

    if sys.argv[2].lower() == '-flat':
        dest_flat = True
        dest = sys.argv[3]
    else:
        dest_flat = False
        dest = sys.argv[2]

    main(source, dest, dest_flat)

    os.chdir(me)
    




More information about the fedora-extras-commits mailing list