1
2
3 import argparse
4 import os
5 import subprocess
6 import datetime
7 import sqlalchemy
8 import time
9
10 import flask
11 from flask_script import Manager, Command, Option, Group
12 from flask_whooshee import Whooshee
13
14 from coprs import app
15 from coprs import db
16 from coprs import exceptions
17 from coprs import models
18 from coprs.logic import coprs_logic, packages_logic, actions_logic, builds_logic
19 from coprs.views.misc import create_user_wrapper
20 from coprs.whoosheers import CoprWhoosheer
21 from sqlalchemy import or_
22 from coprs.helpers import chroot_to_branch,StatusEnum
23
24
26
27 - def run(self, test_args):
28 os.environ["COPRS_ENVIRON_UNITTEST"] = "1"
29 if not (("COPR_CONFIG" in os.environ) and os.environ["COPR_CONFIG"]):
30 os.environ["COPR_CONFIG"] = "/etc/copr/copr_unit_test.conf"
31 os.environ["PYTHONPATH"] = "."
32 return subprocess.call(["/usr/bin/python3", "-m", "pytest"] + (test_args or []))
33
34 option_list = (
35 Option("-a",
36 dest="test_args",
37 nargs=argparse.REMAINDER),
38 )
39
40
42
43 """
44 Create the sqlite DB file (not the tables).
45 Used for alembic, "create_db" does this automatically.
46 """
47
49 if flask.current_app.config["SQLALCHEMY_DATABASE_URI"].startswith("sqlite"):
50
51 datadir_name = os.path.dirname(
52 flask.current_app.config["SQLALCHEMY_DATABASE_URI"][10:])
53 if not os.path.exists(datadir_name):
54 os.makedirs(datadir_name)
55
56
58
59 """
60 Create the DB schema
61 """
62
63 - def run(self, alembic_ini=None):
77
78 option_list = (
79 Option("--alembic",
80 "-f",
81 dest="alembic_ini",
82 help="Path to the alembic configuration file (alembic.ini)",
83 required=True),
84 )
85
86
88
89 """
90 Delete DB
91 """
92
95
96
98
103
106
108 print("{0} - chroot doesn\"t exist.".format(chroot_name))
109
110 option_list = (
111 Option("chroot_names",
112 help="Chroot name, e.g. fedora-18-x86_64.",
113 nargs="+"),
114 )
115
116
118
119 "Creates a mock chroot in DB"
120
122 self.option_list += Option(
123 "--dist-git-branch",
124 "-b",
125 dest="branch",
126 help="Branch name for this set of new chroots"),
127
128 - def run(self, chroot_names, branch=None):
141
142
144
145 option_list = (
146 Option("rawhide_chroot", help="Rawhide chroot name, e.g. fedora-rawhide-x86_64."),
147 Option("dest_chroot", help="Destination chroot, e.g. fedora-24-x86_64."),
148 )
149
150 - def run(self, rawhide_chroot, dest_chroot):
195
209
212
213
215
216 "Copy backend data of the latest successful rawhide builds into a new chroot"
217
218 - def run(self, rawhide_chroot, dest_chroot):
240
241
243
244 "Activates or deactivates a chroot"
245
246 - def run(self, chroot_names, action):
257
258 option_list = ChrootCommand.option_list + (
259 Option("--action",
260 "-a",
261 dest="action",
262 help="Action to take - currently activate or deactivate",
263 choices=["activate", "deactivate"],
264 required=True),
265 )
266
267
269
270 "Activates or deactivates a chroot"
271
272 - def run(self, chroot_names):
281
282
284
285 "Displays current mock chroots"
286
287 - def run(self, active_only):
292
293 option_list = (
294 Option("--active-only",
295 "-a",
296 dest="active_only",
297 help="Display only active chroots",
298 required=False,
299 action="store_true",
300 default=False),
301 )
302
303
305
306 """
307 You should not use regularly as that user will not be related to FAS account.
308 This should be used only for testing or adding special accounts e.g. proxy user.
309 """
310
311 - def run(self, name, mail, **kwargs):
325
326 option_list = (
327 Option("name"),
328 Option("mail"),
329 Option("--api_token", default=None, required=False),
330 Option("--api_login", default=None, required=False),
331 )
332
333
335
336 - def run(self, name, **kwargs):
358
359 option_list = (
360 Option("name"),
361 Group(
362 Option("--admin",
363 action="store_true"),
364 Option("--no-admin",
365 action="store_true"),
366 exclusive=True
367 ),
368 Group(
369 Option("--proven",
370 action="store_true"),
371 Option("--no-proven",
372 action="store_true"),
373 exclusive=True
374 ),
375 Group(
376 Option("--proxy",
377 action="store_true"),
378 Option("--no-proxy",
379 action="store_true"),
380 exclusive=True
381 )
382 )
383
384
386
387 """
388 Marks build as failed on all its non-finished chroots
389 """
390
391 option_list = [Option("build_id")]
392
393 - def run(self, build_id, **kwargs):
394 try:
395 builds_logic.BuildsLogic.mark_as_failed(build_id)
396 print("Marking non-finished chroots of build {} as failed".format(build_id))
397 db.session.commit()
398
399 except (sqlalchemy.exc.DataError, sqlalchemy.orm.exc.NoResultFound) as e:
400 print("Error: No such build {}".format(build_id))
401 return 1
402
403
405 """
406 recreates whoosh indexes for all projects
407 """
408
425
426
428 """
429 Recreates whoosh indexes for projects for which
430 indexed data were updated in last n minutes.
431 Doesn't update schema.
432 """
433
434 option_list = [Option("minutes_passed")]
435
436 - def run(self, minutes_passed):
446
447
448 manager = Manager(app)
449 manager.add_command("test", TestCommand())
450 manager.add_command("create_sqlite_file", CreateSqliteFileCommand())
451 manager.add_command("create_db", CreateDBCommand())
452 manager.add_command("drop_db", DropDBCommand())
453 manager.add_command("create_chroot", CreateChrootCommand())
454 manager.add_command("alter_chroot", AlterChrootCommand())
455 manager.add_command("display_chroots", DisplayChrootsCommand())
456 manager.add_command("drop_chroot", DropChrootCommand())
457 manager.add_command("alter_user", AlterUserCommand())
458 manager.add_command("add_user", AddUserCommand())
459 manager.add_command("fail_build", FailBuildCommand())
460 manager.add_command("update_indexes", UpdateIndexesCommand())
461 manager.add_command("update_indexes_quick", UpdateIndexesQuickCommand())
462 manager.add_command("rawhide_to_release", RawhideToReleaseCommand())
463 manager.add_command("backend_rawhide_to_release", BackendRawhideToReleaseCommand())
464
465 if __name__ == "__main__":
466 manager.run()
467