[copr] master: Automatic commit of package [prunerepo] release [1.0-1]. (82adb68)
by clime@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 82adb680a0b2f1d574a5be29bae603d0dad75414
Author: clime <clime(a)redhat.com>
Date: Tue Jan 19 15:30:31 2016 +0100
Automatic commit of package [prunerepo] release [1.0-1].
>---------------------------------------------------------------
prunerepo/prunerepo.spec | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/prunerepo/prunerepo.spec b/prunerepo/prunerepo.spec
index e636a42..9d7d228 100644
--- a/prunerepo/prunerepo.spec
+++ b/prunerepo/prunerepo.spec
@@ -1,4 +1,4 @@
-Summary: Remove old packages from rpm-md (yum) repository
+Summary: Remove old packages from rpm-md repository
Name: prunerepo
Version: 1.0
Release: 1%{?dist}
8 years, 4 months
[copr] master: [prunerepo] initial package version (8c6d397)
by clime@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 8c6d3971d71db622d798781b0f2a0bd712d3e81f
Author: clime <clime(a)redhat.com>
Date: Tue Jan 19 12:19:08 2016 +0100
[prunerepo] initial package version
>---------------------------------------------------------------
.tito/packages/prunerepo | 1 +
prunerepo/.gitignore | 1 +
{backend => prunerepo}/LICENSE | 0
prunerepo/prunerepo | 92 ++++++++++++++++++++++++++++++++++++++++
prunerepo/prunerepo.spec | 49 +++++++++++++++++++++
prunerepo/setup.py | 26 +++++++++++
6 files changed, 169 insertions(+), 0 deletions(-)
diff --git a/.tito/packages/prunerepo b/.tito/packages/prunerepo
new file mode 100644
index 0000000..3c95d35
--- /dev/null
+++ b/.tito/packages/prunerepo
@@ -0,0 +1 @@
+1.0-1 prunerepo/
diff --git a/prunerepo/.gitignore b/prunerepo/.gitignore
new file mode 100644
index 0000000..2b29f27
--- /dev/null
+++ b/prunerepo/.gitignore
@@ -0,0 +1 @@
+tests
diff --git a/backend/LICENSE b/prunerepo/LICENSE
similarity index 100%
copy from backend/LICENSE
copy to prunerepo/LICENSE
diff --git a/prunerepo/prunerepo b/prunerepo/prunerepo
new file mode 100755
index 0000000..053686f
--- /dev/null
+++ b/prunerepo/prunerepo
@@ -0,0 +1,92 @@
+#!/usr/bin/env python3
+
+import subprocess
+import sys
+import argparse
+import rpm
+import os
+
+spec_file = rpm.ts().parseSpec('prunerepo.spec')
+
+parser = argparse.ArgumentParser(description=spec_file.sourceHeader.summary.decode("utf-8"))
+
+parser.add_argument('path', action='store',
+ help='local path to a yum repository')
+parser.add_argument('--days', type=int, action='store', default=0, # todo
+ help='only remove packages older than DAYS (by their build date)')
+parser.add_argument('--copr', type=int, action='store', default=0, # todo
+ help='additionaly remove whole copr build dirs and logs if the associated package gets deleted')
+parser.add_argument('--nocreaterepo', action='store_true',
+ help='repository is not automatically recreated after deletion')
+parser.add_argument('--verbose', action='store_true',
+ help='print all deleted packages (*.src.rpm, *.rpm) to stdout')
+parser.add_argument('-v', '--version', action='version', version=spec_file.sourceHeader.version.decode("utf-8"),
+ help='print program version and exit')
+
+args = parser.parse_args()
+
+
+get_all_packages_cmd = [
+ 'dnf',
+ 'repoquery',
+ '--disablerepo=*',
+ '--repofrompath=prunerepo_query,'+os.path.abspath(args.path),
+ '--repoid=prunerepo_query',
+ '--enablerepo=prunerepo_query',
+ '--refresh',
+ '--queryformat="%{location}"',
+ '--quiet',
+]
+
+get_latest_packages_cmd = get_all_packages_cmd + [ '--latest-limit=1' ]
+
+
+def run_cmd(cmd):
+ """
+ Run given command in a subprocess
+ """
+ print("Executing: "+' '.join(cmd))
+ process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ (stdout, stderr) = process.communicate()
+ if process.returncode != 0:
+ print(stderr, file=sys.stderr)
+ sys.exit(1)
+ return (stdout, stderr)
+
+
+def get_packages(repoquery_cmd):
+ """
+ Get paths to packages in the repository according to given repoquery_cmd
+ """
+ (stdout, stderr) = run_cmd(repoquery_cmd)
+ rel_package_paths = [relpath.strip('"') for relpath in stdout.decode(encoding='utf-8').split()]
+ abs_package_paths = [os.path.abspath(os.path.join(args.path, relpath)) for relpath in rel_package_paths]
+ return abs_package_paths
+
+
+def prune_packages():
+ print("Removing obsoleted packages...")
+ latest_packages = get_packages(get_latest_packages_cmd)
+ all_packages = get_packages(get_all_packages_cmd)
+ to_remove_packages = set(all_packages) - set(latest_packages)
+ removed_counter = 0
+ for package in to_remove_packages:
+ os.remove(package)
+ if args.verbose:
+ print(package)
+ removed_counter += 1
+ print('{} packages removed'.format(removed_counter))
+
+
+def recreate_repo():
+ """
+ Recreate the repository by using createrepo_c
+ """
+ createrepo_cmd = ['/usr/bin/createrepo_c', '--database', '--update'] + [ args.path ]
+ return run_cmd(createrepo_cmd)
+
+
+if __name__ == '__main__':
+ prune_packages()
+ if not args.nocreaterepo:
+ recreate_repo()
diff --git a/prunerepo/prunerepo.spec b/prunerepo/prunerepo.spec
new file mode 100644
index 0000000..e636a42
--- /dev/null
+++ b/prunerepo/prunerepo.spec
@@ -0,0 +1,49 @@
+Summary: Remove old packages from rpm-md (yum) repository
+Name: prunerepo
+Version: 1.0
+Release: 1%{?dist}
+
+# Source is created by:
+# git clone https://git.fedorahosted.org/git/copr.git
+# cd copr/prunerepo
+# tito build --tgz
+Source0: %{name}-%{version}.tar.gz
+
+License: GPLv2+
+BuildArch: noarch
+BuildRequires: python3-devel
+BuildRequires: rpm-python3
+Requires: createrepo_c
+Requires: dnf-plugins-core
+Requires: rpm-python3
+Requires: python3
+
+%description
+Removes obsoleted package versions from a yum repository. Both
+rpms and srpms, that have a newer version available in that same
+repository, are deleted from filesystem and rpm-md metadata are
+recreated afterwards. Support for specific repository structure
+(e.g. COPR) is also available making it possible to additionally
+remove build logs and whole build directories associated with a
+package. After deletion of obsoleted packages, the command
+"createrepo_c --database --update" is called to recreate the
+repository metadata.
+
+%prep
+%setup -q
+
+%build
+%py3_build
+
+%install
+%py3_install
+
+%files
+%license LICENSE
+
+%{python3_sitelib}/*
+%{_bindir}/prunerepo
+
+%changelog
+* Tue Jan 19 2016 clime <clime(a)redhat.com> 1.0-1
+- Initial package version
diff --git a/prunerepo/setup.py b/prunerepo/setup.py
new file mode 100755
index 0000000..6d946e6
--- /dev/null
+++ b/prunerepo/setup.py
@@ -0,0 +1,26 @@
+#!/usr/bin/env python3
+
+import rpm
+from setuptools import setup
+
+spec_file = rpm.ts().parseSpec('prunerepo.spec')
+
+print(spec_file.sourceHeader.version)
+
+setup(
+ name=spec_file.sourceHeader.name.decode("utf-8"),
+ version=spec_file.sourceHeader.version.decode("utf-8"),
+ description=spec_file.sourceHeader.summary.decode("utf-8"),
+ long_description=spec_file.sourceHeader.description.decode("utf-8"),
+ author='clime',
+ author_email='clime(a)redhat.com',
+ download_url='https://git.fedorahosted.org/git/copr.git',
+ license='GPLv2+',
+ classifiers=[
+ "License :: OSI Approved :: GNU General Public License v2 or later (GPLv2+)",
+ "Programming Language :: Python :: 3",
+ "Topic :: Software Development :: Build Tools",
+ ],
+ scripts=['prunerepo'],
+ include_package_data=True,
+)
8 years, 4 months
[copr] master: Automatic commit of package [copr-prune-repo] release [1.5-1]. (c027e19)
by clime@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit c027e1910234cea25bccf78933c3b05374df37d7
Author: clime <clime(a)redhat.com>
Date: Tue Jan 19 11:27:17 2016 +0100
Automatic commit of package [copr-prune-repo] release [1.5-1].
>---------------------------------------------------------------
.tito/packages/copr-prune-repo | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/.tito/packages/copr-prune-repo b/.tito/packages/copr-prune-repo
new file mode 100644
index 0000000..cb15436
--- /dev/null
+++ b/.tito/packages/copr-prune-repo
@@ -0,0 +1 @@
+1.5-1 copr-prune-repo/
8 years, 4 months
[copr] master: [copr-prune-repo] updates according to package review by Mirek Suchy (60dc254)
by clime@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 60dc254ec21a815c99d81afc882611740e4a3fd0
Author: clime <clime(a)redhat.com>
Date: Tue Jan 19 11:20:29 2016 +0100
[copr-prune-repo] updates according to package review by Mirek Suchy
>---------------------------------------------------------------
{backend => copr-prune-repo}/LICENSE | 0
copr-prune-repo/copr-prune-repo.spec | 17 ++++++++++++-----
.../{copr_prune_repo.py => copr_prune_repo} | 0
copr-prune-repo/man/man1/copr_prune_repo.1 | 8 ++++----
copr-prune-repo/setup.py | 9 ++++-----
copr-prune-repo/tests/test.sh | 2 +-
6 files changed, 21 insertions(+), 15 deletions(-)
diff --git a/backend/LICENSE b/copr-prune-repo/LICENSE
similarity index 100%
copy from backend/LICENSE
copy to copr-prune-repo/LICENSE
diff --git a/copr-prune-repo/copr-prune-repo.spec b/copr-prune-repo/copr-prune-repo.spec
index 60fbf0a..f3d0549 100644
--- a/copr-prune-repo/copr-prune-repo.spec
+++ b/copr-prune-repo/copr-prune-repo.spec
@@ -1,6 +1,6 @@
-Summary: Remove failed and obsolete succeeded builds (with the associated packages) from a copr repository.
+Summary: Remove failed and obsolete succeeded package builds from a copr repository
Name: copr-prune-repo
-Version: 1.4
+Version: 1.5
Release: 1%{?dist}
# Source is created by:
@@ -28,15 +28,22 @@ The repository needs to be recreated manually afterwards with createrepo.
%install
%py3_install
-install -d $RPM_BUILD_ROOT/%{_mandir}/man1
-cp man/man1/copr_prune_repo.1 $RPM_BUILD_ROOT%{_mandir}/man1/
+install -d %{buildroot}%{_mandir}/man1
+cp man/man1/copr_prune_repo.1 %{buildroot}%{_mandir}/man1/
%files
+%license LICENSE
+
%{python3_sitelib}/*
-%{_bindir}/copr_prune_repo.py
+%{_bindir}/copr_prune_repo
%doc %{_mandir}/man1/copr_prune_repo.1*
%changelog
+* Tue Jan 19 2016 clime <clime(a)redhat.com> 1.5-1
+- .py removed from the name of executable
+- LICENCE file added
+- .spec improvements
+
* Sat Jan 16 2016 clime <clime(a)redhat.com> 1.4-1
- dnf cache bypassed by using --refresh for dnf repoquery
diff --git a/copr-prune-repo/copr_prune_repo.py b/copr-prune-repo/copr_prune_repo
similarity index 100%
rename from copr-prune-repo/copr_prune_repo.py
rename to copr-prune-repo/copr_prune_repo
diff --git a/copr-prune-repo/man/man1/copr_prune_repo.1 b/copr-prune-repo/man/man1/copr_prune_repo.1
index 94ae6c9..aa1d8fa 100644
--- a/copr-prune-repo/man/man1/copr_prune_repo.1
+++ b/copr-prune-repo/man/man1/copr_prune_repo.1
@@ -1,9 +1,9 @@
-.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.3.
-.TH COPR_PRUNE_REPO.PY "1" "January 2016" "copr_prune_repo.py 1.4" "User Commands"
+.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.57.3.
+.TH COPR_PRUNE_REPO "1" "January 2016" "copr_prune_repo 1.5" "User Commands"
.SH NAME
-copr_prune_repo.py \- manual page for copr_prune_repo.py 1.4
+copr_prune_repo \- manual page for copr_prune_repo 1.5
.SH DESCRIPTION
-usage: copr_prune_repo.py [\-h] [\-\-days DAYS] [\-\-failed] [\-\-obsoleted]
+usage: copr_prune_repo [\-h] [\-\-days DAYS] [\-\-failed] [\-\-obsoleted]
.TP
[\-\-disableusercheck] [\-v]
path
diff --git a/copr-prune-repo/setup.py b/copr-prune-repo/setup.py
index f35ada3..c8074c6 100755
--- a/copr-prune-repo/setup.py
+++ b/copr-prune-repo/setup.py
@@ -2,14 +2,13 @@
from distutils.core import setup
setup(name='copr-prune-repo',
- version='1.4',
- description='Remove failed and obsolete succeeded builds (with the associated packages) from a copr repository.',
+ version='1.5',
+ description='Remove failed and obsolete succeeded package builds from a copr repository',
author='clime',
- author_email='micnovot(a)redhat.com',
- url='http://github.com/clime/copr-prune-repo',
+ author_email='clime(a)redhat.com',
licence='GPLv2+',
requires=['python3'],
- scripts=['copr_prune_repo.py'],
+ scripts=['copr_prune_repo'],
long_description='Removes failed and obsolete succeeded builds (with the associated packages) from a copr repository. '+
'The build directories should belong to `copr` user and contain `build.info`, `fail` or `success` files, otherwise nothing gets deleted. '+
'The repository needs to be recreated manually afterwards with createrepo.'
diff --git a/copr-prune-repo/tests/test.sh b/copr-prune-repo/tests/test.sh
index 5ebab19..3a032ba 100755
--- a/copr-prune-repo/tests/test.sh
+++ b/copr-prune-repo/tests/test.sh
@@ -1,6 +1,6 @@
#!/bin/bash
-alias RUNCMD='../copr_prune_repo.py'
+alias RUNCMD='../copr_prune_repo'
shopt -s expand_aliases
#die() { echo "$@" 1>&2 ; exit 1; }
8 years, 4 months
[copr] master: Initialized to use tito. (eeb49b6)
by clime@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit eeb49b6e236dd9df0a27ac9e08633d4fca8b99f1
Author: clime <clime(a)redhat.com>
Date: Tue Jan 19 10:55:26 2016 +0100
Initialized to use tito.
>---------------------------------------------------------------
{copr-prune-repo/.tito => .tito}/packages/.readme | 0
{copr-prune-repo/.tito => .tito}/tito.props | 0
2 files changed, 0 insertions(+), 0 deletions(-)
diff --git a/copr-prune-repo/.tito/packages/.readme b/.tito/packages/.readme
similarity index 100%
copy from copr-prune-repo/.tito/packages/.readme
copy to .tito/packages/.readme
diff --git a/copr-prune-repo/.tito/tito.props b/.tito/tito.props
similarity index 100%
copy from copr-prune-repo/.tito/tito.props
copy to .tito/tito.props
8 years, 4 months
[copr] master: "localhost-targeted" spawn and terminate playbooks added for testing (3e1a6ef)
by clime@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 3e1a6ef0a89c20f99777de586429b250953ad8b3
Author: clime <clime(a)redhat.com>
Date: Mon Jan 18 20:51:13 2016 +0100
"localhost-targeted" spawn and terminate playbooks added for testing
>---------------------------------------------------------------
backend/conf/playbooks/spawn_local.yml | 12 ++++++++++++
backend/conf/playbooks/terminate_local.yml | 6 ++++++
2 files changed, 18 insertions(+), 0 deletions(-)
diff --git a/backend/conf/playbooks/spawn_local.yml b/backend/conf/playbooks/spawn_local.yml
new file mode 100644
index 0000000..cdef6f0
--- /dev/null
+++ b/backend/conf/playbooks/spawn_local.yml
@@ -0,0 +1,12 @@
+---
+- name: create instance
+ hosts: localhost
+ remote_user: root
+ gather_facts: False
+ tasks:
+ - name: generate builder name
+ local_action: command echo "Copr builder {{ 999999999 | random }}"
+ register: vm_name
+
+ - debug: msg="IP=127.0.0.1"
+ - debug: msg="vm_name={{vm_name.stdout}}"
diff --git a/backend/conf/playbooks/terminate_local.yml b/backend/conf/playbooks/terminate_local.yml
new file mode 100644
index 0000000..b5507b5
--- /dev/null
+++ b/backend/conf/playbooks/terminate_local.yml
@@ -0,0 +1,6 @@
+---
+- name: terminate instance
+ hosts: localhost
+ remote_user: root
+ gather_facts: False
+ # do nothing
8 years, 4 months
[copr] master: [cli] require sufficiently new python-copr package (f5741fe)
by Pavel Raiskup
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit f5741fe267e7a92e4a4c05ef8b8830e0fd8ccc25
Author: Pavel Raiskup <praiskup(a)redhat.com>
Date: Mon Jan 18 08:27:06 2016 +0100
[cli] require sufficiently new python-copr package
>---------------------------------------------------------------
cli/copr-cli.spec | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/cli/copr-cli.spec b/cli/copr-cli.spec
index 3a38bb5..4a4d0d6 100644
--- a/cli/copr-cli.spec
+++ b/cli/copr-cli.spec
@@ -33,7 +33,7 @@ BuildRequires: python-argparse
%endif
Requires: python-setuptools
-Requires: python-copr
+Requires: python-copr >= 1.63
Requires: wget
%if 0%{?rhel} < 7 && 0%{?rhel} > 0
Requires: python-argparse
8 years, 4 months
[copr] master: [frontend][backend] implement rawhide to release feature First create new chroots: python manage.py create_chroot fedora-24-i386 fedora-24-x86_64 (bd04bf6)
by frostyx@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit bd04bf6a1d46dbfbf9c1d846b50f10547af0f2fd
Author: Jakub Kadl����k <jkadlcik(a)redhat.com>
Date: Mon Jan 18 01:06:22 2016 +0100
[frontend][backend] implement rawhide to release feature
First create new chroots:
python manage.py create_chroot fedora-24-i386 fedora-24-x86_64
And then copy data from rawhide into them:
python manage.py rawhide_to_release fedora-24-i386 fedora-24-x86_64
>---------------------------------------------------------------
backend/backend/actions.py | 26 ++++++++++
frontend/coprs_frontend/coprs/helpers.py | 1 +
.../coprs_frontend/coprs/logic/actions_logic.py | 10 ++++
frontend/coprs_frontend/coprs/models.py | 6 ++
frontend/coprs_frontend/manage.py | 50 +++++++++++++++++++-
5 files changed, 92 insertions(+), 1 deletions(-)
diff --git a/backend/backend/actions.py b/backend/backend/actions.py
index c3cc4cc..9135f77 100644
--- a/backend/backend/actions.py
+++ b/backend/backend/actions.py
@@ -232,6 +232,28 @@ class Action(object):
except CoprKeygenRequestError:
result.result = ActionResult.FAILURE
+ def handle_rawhide_to_release(self, result):
+ data = json.loads(self.data["data"])
+
+ for chroot in data["chroots"]:
+ rawhide_chroot = "fedora-rawhide-{}".format(chroot.split("-")[-1])
+ try:
+ chrootdir = os.path.join(self.opts.destdir, data["user"], data["copr"], chroot)
+ if not os.path.exists(chrootdir):
+ self.log.debug("Create directory: {}".format(chrootdir))
+ os.makedirs(chrootdir)
+
+ for build in data["builds"]:
+ srcdir = os.path.join(self.opts.destdir, data["user"], data["copr"], rawhide_chroot, build)
+ if os.path.exists(srcdir):
+ destdir = os.path.join(chrootdir, build)
+ self.log.debug("Copy directory: {} as {}".format(srcdir, destdir))
+ shutil.copytree(srcdir, destdir)
+ except:
+ result.result = ActionResult.FAILURE
+
+ result.result = ActionResult.SUCCESS
+
def run(self):
""" Handle action (other then builds) - like rename or delete of project """
result = Munch()
@@ -262,6 +284,9 @@ class Action(object):
elif action_type == ActionType.GEN_GPG_KEY:
self.handle_generate_gpg_key(result)
+ elif action_type == ActionType.RAWHIDE_TO_RELEASE:
+ self.handle_rawhide_to_release(result)
+
self.log.info("Action result: {}".format(result))
if "result" in result:
@@ -279,6 +304,7 @@ class ActionType(object):
CREATEREPO = 3
UPDATE_COMPS = 4
GEN_GPG_KEY = 5
+ RAWHIDE_TO_RELEASE = 6
class ActionResult(object):
diff --git a/frontend/coprs_frontend/coprs/helpers.py b/frontend/coprs_frontend/coprs/helpers.py
index de1d6d4..c47c5f1 100644
--- a/frontend/coprs_frontend/coprs/helpers.py
+++ b/frontend/coprs_frontend/coprs/helpers.py
@@ -66,6 +66,7 @@ class ActionTypeEnum(with_metaclass(EnumType, object)):
"createrepo": 3,
"update_comps": 4,
"gen_gpg_key": 5,
+ "rawhide_to_release": 6,
}
diff --git a/frontend/coprs_frontend/coprs/logic/actions_logic.py b/frontend/coprs_frontend/coprs/logic/actions_logic.py
index 3ff0e31..278f2f1 100644
--- a/frontend/coprs_frontend/coprs/logic/actions_logic.py
+++ b/frontend/coprs_frontend/coprs/logic/actions_logic.py
@@ -160,3 +160,13 @@ class ActionsLogic(object):
created_on=int(time.time()),
)
db.session.add(action)
+
+ @classmethod
+ def send_rawhide_to_release(cls, data):
+ action = models.Action(
+ action_type=helpers.ActionTypeEnum("rawhide_to_release"),
+ object_type="None",
+ data=json.dumps(data),
+ created_on=int(time.time()),
+ )
+ db.session.add(action)
diff --git a/frontend/coprs_frontend/coprs/models.py b/frontend/coprs_frontend/coprs/models.py
index 49f55c0..42db722 100644
--- a/frontend/coprs_frontend/coprs/models.py
+++ b/frontend/coprs_frontend/coprs/models.py
@@ -390,6 +390,12 @@ class Package(db.Model, helpers.Serializer):
return "{}/{}.git".format(app.config["DIST_GIT_URL"], self.dist_git_repo)
return None
+ def last_build(self, successful=False):
+ for build in reversed(self.builds):
+ if not successful or build.state == "succeeded":
+ return build
+ return None
+
class Build(db.Model, helpers.Serializer):
diff --git a/frontend/coprs_frontend/manage.py b/frontend/coprs_frontend/manage.py
index abe3fb9..acd2373 100755
--- a/frontend/coprs_frontend/manage.py
+++ b/frontend/coprs_frontend/manage.py
@@ -12,7 +12,7 @@ from coprs import app
from coprs import db
from coprs import exceptions
from coprs import models
-from coprs.logic import coprs_logic
+from coprs.logic import coprs_logic, packages_logic, actions_logic
from coprs.views.misc import create_user_wrapper
from coprs.whoosheers import CoprUserWhoosheer
from run import generate_repo_packages
@@ -121,6 +121,53 @@ class CreateChrootCommand(ChrootCommand):
self.print_already_exists(chroot_name)
+class RawhideToReleaseCommand(ChrootCommand):
+
+ def run(self, chroot_names):
+ for chroot_name in chroot_names:
+ mock_chroot = coprs_logic.MockChrootsLogic.get_from_name(chroot_name).first()
+ if not mock_chroot:
+ print("Given chroot does not exist. Please run:")
+ print(" sudo python manage.py create_chroot {}".format(chroot_name))
+ print("Nothing was committed, rolling back")
+ return
+
+ for copr in coprs_logic.CoprsLogic.get_all():
+ if not self.has_rawhide(copr):
+ continue
+
+ data = {"copr": copr.name,
+ "user": copr.owner.name,
+ "chroots": chroot_names,
+ "builds": []}
+
+ for package in packages_logic.PackagesLogic.get_all(copr.id):
+ last_build = package.last_build(successful=True)
+ if last_build:
+ data["builds"].append("{}-{}".format(str(last_build.id).zfill(8), package.name))
+
+ if len(data["builds"]):
+ actions_logic.ActionsLogic.send_rawhide_to_release(data)
+ self.turn_on_the_chroot_for_copr(copr, mock_chroot)
+
+ db.session.commit()
+
+ def turn_on_the_chroot_for_copr(self, copr, mock_chroot):
+ rawhide_chroot = coprs_logic.CoprChrootsLogic.\
+ get_by_name_safe(copr, "fedora-rawhide-{}".format(mock_chroot.name.split("-")[-1]))
+
+ if not rawhide_chroot or coprs_logic.CoprChrootsLogic.get_by_name_safe(copr, mock_chroot.name):
+ return
+
+ coprs_logic.CoprChrootsLogic.create_chroot(copr.owner, copr, mock_chroot,
+ buildroot_pkgs=rawhide_chroot.buildroot_pkgs,
+ comps=rawhide_chroot.comps,
+ comps_name=rawhide_chroot.comps_name)
+
+ def has_rawhide(self, copr):
+ return any(filter(lambda ch: ch.os_version == "rawhide", copr.mock_chroots))
+
+
class AlterChrootCommand(ChrootCommand):
"Activates or deactivates a chroot"
@@ -318,6 +365,7 @@ manager.add_command("alter_user", AlterUserCommand())
manager.add_command("add_debug_user", AddDebugUserCommand())
manager.add_command("update_indexes", UpdateIndexesCommand())
manager.add_command("generate_repo_packages", GenerateRepoPackagesCommand())
+manager.add_command("rawhide_to_release", RawhideToReleaseCommand())
if __name__ == "__main__":
manager.run()
8 years, 4 months