[copr] master: Basic mock chroot commands for manage.py (30b3980)

bkabrda at fedoraproject.org bkabrda at fedoraproject.org
Tue Jan 15 11:06:04 UTC 2013


Repository : http://git.fedorahosted.org/cgit/copr.git

On branch  : master

>---------------------------------------------------------------

commit 30b3980485418b73b355d45f75a1d47c2dd3a6aa
Author: Bohuslav Kabrda <bkabrda at redhat.com>
Date:   Mon Jan 14 10:35:39 2013 +0100

    Basic mock chroot commands for manage.py


>---------------------------------------------------------------

 coprs_frontend/manage.py |   83 +++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 82 insertions(+), 1 deletions(-)

diff --git a/coprs_frontend/manage.py b/coprs_frontend/manage.py
index cd53522..7c9cddf 100755
--- a/coprs_frontend/manage.py
+++ b/coprs_frontend/manage.py
@@ -5,7 +5,7 @@ import os
 import flask
 from flask.ext.script import Manager, Command, Option
 
-from coprs import app, db
+from coprs import app, db, models
 
 class CreateSqliteFileCommand(Command):
     'Create the sqlite DB file (not the tables). Used for alembic, "create_db" does this automatically.'
@@ -42,10 +42,91 @@ class DropDBCommand(Command):
     def run(self):
         db.drop_all()
 
+class ChrootCommand(Command):
+    option_list = (
+        Option('chroot_name',
+               help='Chroot name, e.g. fedora-18-x86_64.'),
+    )
+
+class CreateChrootCommand(ChrootCommand):
+    'Creates a mock chroot in DB'
+    def run(self, chroot_name):
+        split_chroot = chroot_name.split('-')
+        if len(split_chroot) < 3:
+            print 'Invalid chroot format, must be "{release}-{version}-{arch}".'
+        new_chroot = models.MockChroot(os_release=split_chroot[0],
+                                       os_version=split_chroot[1],
+                                       arch=split_chroot[2],
+                                       is_active=True)
+        db.session.add(new_chroot)
+        db.session.commit()
+
+class AlterChrootCommand(ChrootCommand):
+    'Activates or deactivates a chroot'
+    def run(self, chroot_name, action):
+        split_chroot = chroot_name.split('-')
+        if len(split_chroot) < 3:
+            print 'Invalid chroot format, must be "{release}-{version}-{arch}".'
+        chroot = models.MockChroot.query.filter(models.MockChroot.os_release==split_chroot[0],
+                                                models.MockChroot.os_version==split_chroot[1],
+                                                models.MockChroot.arch==split_chroot[2]).first()
+        if action == 'activate':
+            chroot.is_active = True
+        else:
+            chroot.is_active = False
+
+        db.session.add(chroot)
+        db.session.commit()
+
+    option_list = ChrootCommand.option_list + (
+            Option('--action',
+                   '-a',
+                   dest='action',
+                   help='Action to take - currently activate or deactivate',
+                   choices=['activate', 'deactivate'],
+                   required=True),
+    )
+
+class DropChrootCommand(ChrootCommand):
+    'Activates or deactivates a chroot'
+    def run(self, chroot_name):
+        split_chroot = chroot_name.split('-')
+        if len(split_chroot) < 3:
+            print 'Invalid chroot format, must be "{release}-{version}-{arch}".'
+        chroot = models.MockChroot.query.filter(models.MockChroot.os_release==split_chroot[0],
+                                                models.MockChroot.os_version==split_chroot[1],
+                                                models.MockChroot.arch==split_chroot[2]).first()
+        if chroot:
+            db.session.delete(chroot)
+            db.session.commit()
+
+class DisplayChrootsCommand(Command):
+    'Displays current mock chroots'
+    def run(self, active_only):
+        chroots = models.MockChroot.query
+        if active_only:
+            chroots = chroots.filter(models.MockChroot.is_active==True)
+        for ch in chroots:
+            print '{0}-{1}-{2}'.format(ch.os_release, ch.os_version, ch.arch)
+
+    option_list = (
+            Option('--active-only',
+                   '-a',
+                   dest='active_only',
+                   help='Display only active chroots',
+                   required=False,
+                   action='store_true',
+                   default=False),
+    )
+
 manager = Manager(app)
 manager.add_command('create_sqlite_file', CreateSqliteFileCommand())
 manager.add_command('create_db', CreateDBCommand())
 manager.add_command('drop_db', DropDBCommand())
+manager.add_command('create_chroot', CreateChrootCommand())
+manager.add_command('alter_chroot', AlterChrootCommand())
+manager.add_command('display_chroots', DisplayChrootsCommand())
+manager.add_command('drop_chroot', DropChrootCommand())
 
 if __name__ == '__main__':
     manager.run()



More information about the copr-devel mailing list