| |
@@ -0,0 +1,150 @@
|
| |
+ #!/usr/bin/env python2
|
| |
+ # -*- coding: utf-8 -*-
|
| |
+
|
| |
+
|
| |
+ # 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; version 2 of the License.
|
| |
+ #
|
| |
+ # 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 tempfile
|
| |
+ import shutil
|
| |
+ import libcomps
|
| |
+ from contextlib import contextmanager
|
| |
+
|
| |
+ #import pungi.phases.pkgsets.pkgsets
|
| |
+ from rpmfluff import SimpleRpmBuild
|
| |
+
|
| |
+ # helpers for creating RPMs to test with
|
| |
+ @contextmanager
|
| |
+ def in_tempdir(outdir, prefix='_'):
|
| |
+ """
|
| |
+ py:class:: in_tempdir(prefix='_')
|
| |
+
|
| |
+ Context manager for the rpmbuild tempdir
|
| |
+ """
|
| |
+ oldcwd = os.getcwd()
|
| |
+ tmpdir = tempfile.mkdtemp(prefix=prefix)
|
| |
+ os.chdir(tmpdir)
|
| |
+ yield
|
| |
+ os.chdir(oldcwd)
|
| |
+ shutil.rmtree(tmpdir)
|
| |
+
|
| |
+ @contextmanager
|
| |
+ def in_dir(directory):
|
| |
+ """
|
| |
+ py:class:: in_dir(dir)
|
| |
+
|
| |
+ Context manager to handle things in a generic method
|
| |
+ """
|
| |
+ oldcwd = os.getcwd()
|
| |
+ tmpdir = tempfile.mkdtemp()
|
| |
+ os.chdir(tmpdir)
|
| |
+ yield
|
| |
+ os.chdir(oldcwd)
|
| |
+
|
| |
+ def make_rpm(outdir, archlist, name, version='1.0', release='1'):
|
| |
+ """
|
| |
+ py:function:: make_rpm(outdir, name='test', version='1.0', release='1', archlist=None)
|
| |
+
|
| |
+ Create the fake test rpms
|
| |
+ """
|
| |
+
|
| |
+ if (archlist is None):
|
| |
+ raise TypeError( "No defined architectures for make_rpm")
|
| |
+
|
| |
+ abs_outdir = os.path.abspath(outdir)
|
| |
+
|
| |
+ if not os.path.isdir(abs_outdir):
|
| |
+ os.mkdir(abs_outdir)
|
| |
+
|
| |
+ p = SimpleRpmBuild(name, version, release, archlist)
|
| |
+ with in_tempdir(abs_outdir, prefix="tmppkgs"):
|
| |
+ p.make()
|
| |
+
|
| |
+ srpm_outdir = os.path.join(
|
| |
+ abs_outdir,
|
| |
+ "repo",
|
| |
+ "src",
|
| |
+ )
|
| |
+
|
| |
+ if not os.path.isdir(srpm_outdir):
|
| |
+ os.makedirs(srpm_outdir)
|
| |
+
|
| |
+ srpmfile = p.get_built_srpm()
|
| |
+ src_outfile = os.path.join(
|
| |
+ os.path.abspath(abs_outdir),
|
| |
+ "repo",
|
| |
+ 'src',
|
| |
+ os.path.basename(srpmfile)
|
| |
+ )
|
| |
+ shutil.move(srpmfile, src_outfile)
|
| |
+
|
| |
+ for arch in archlist:
|
| |
+
|
| |
+ arch_outdir = os.path.join(
|
| |
+ abs_outdir,
|
| |
+ "repo",
|
| |
+ arch,
|
| |
+ )
|
| |
+ if not os.path.isdir(arch_outdir):
|
| |
+ os.makedirs(arch_outdir)
|
| |
+
|
| |
+
|
| |
+ rpmfile = p.get_built_rpm(arch)
|
| |
+ bin_outfile = os.path.join(
|
| |
+ os.path.abspath(abs_outdir),
|
| |
+ "repo",
|
| |
+ arch,
|
| |
+ os.path.basename(rpmfile)
|
| |
+ )
|
| |
+ shutil.move(rpmfile, bin_outfile)
|
| |
+ return p
|
| |
+
|
| |
+ def get_rpm_list_from_comps(compspath):
|
| |
+ """
|
| |
+ py:function:: get_rpm_list_from_comps(compspath)
|
| |
+
|
| |
+ Return a list of rpms from a compsfile
|
| |
+ """
|
| |
+
|
| |
+ pkg_list = []
|
| |
+
|
| |
+ comps = libcomps.Comps()
|
| |
+ comps.fromxml_f(compspath)
|
| |
+
|
| |
+ for group in comps.groups:
|
| |
+ for pkg in comps.groups[group.id].packages:
|
| |
+ pkg_list.append(pkg.name)
|
| |
+
|
| |
+ return pkg_list
|
| |
+
|
| |
+
|
| |
+ if __name__ == "__main__":
|
| |
+ import click
|
| |
+ import json
|
| |
+
|
| |
+ @click.command()
|
| |
+ @click.option('--pkgfile', default=None, required=True,
|
| |
+ help="Path to json pkg file")
|
| |
+ @click.option('--outdir', default=None, required=True,
|
| |
+ help="Directory to create temp dummy repo")
|
| |
+ def createtestdata(pkgfile, outdir):
|
| |
+ pkgdata = json.loads(open(pkgfile,'r').read())
|
| |
+ for pkg in pkgdata['archpkgs']:
|
| |
+ make_rpm(outdir, pkgdata['archs'], pkg)
|
| |
+ for pkg in pkgdata['noarchpkgs']:
|
| |
+ make_rpm(outdir, ['noarch'], pkg)
|
| |
+
|
| |
+ os.popen('/usr/bin/createrepo %s' % os.path.join(outdir, "repo"))
|
| |
+
|
| |
+ createtestdata()
|
| |