|
Pierre-Yves Chibon |
079c2a |
# -*- coding: utf-8 -*-
|
|
Pierre-Yves Chibon |
079c2a |
|
|
Pierre-Yves Chibon |
079c2a |
"""
|
|
Pierre-Yves Chibon |
ffbe63 |
(c) 2017-2018 - Copyright Red Hat Inc
|
|
Pierre-Yves Chibon |
079c2a |
|
|
Pierre-Yves Chibon |
079c2a |
Authors:
|
|
Pierre-Yves Chibon |
079c2a |
Pierre-Yves Chibon <pingou@pingoured.fr></pingou@pingoured.fr>
|
|
Pierre-Yves Chibon |
079c2a |
|
|
Pierre-Yves Chibon |
079c2a |
"""
|
|
Aurélien Bompard |
dcf6f6 |
|
|
Pierre-Yves Chibon |
67d1cc |
from __future__ import print_function, unicode_literals, absolute_import
|
|
Pierre-Yves Chibon |
079c2a |
|
|
Pierre-Yves Chibon |
079c2a |
import argparse
|
|
Pierre-Yves Chibon |
af5184 |
import datetime
|
|
Pierre-Yves Chibon |
079c2a |
import logging
|
|
Pierre-Yves Chibon |
a1181c |
import os
|
|
Patrick Uiterwijk |
d29158 |
import requests
|
|
Patrick Uiterwijk |
d29158 |
from string import Template
|
|
Pierre-Yves Chibon |
f4ba43 |
import sys
|
|
Julen Landa Alustiza |
803bbd |
import pygit2
|
|
Pierre-Yves Chibon |
a1181c |
|
|
Pierre-Yves Chibon |
87a6d0 |
import arrow
|
|
Pierre-Yves Chibon |
ffbe63 |
from six.moves import input
|
|
Pierre-Yves Chibon |
87a6d0 |
|
|
Pierre-Yves Chibon |
9c2953 |
if "PAGURE_CONFIG" not in os.environ and os.path.exists(
|
|
Pierre-Yves Chibon |
9c2953 |
"/etc/pagure/pagure.cfg"
|
|
Pierre-Yves Chibon |
9c2953 |
):
|
|
Pierre-Yves Chibon |
9c2953 |
print("Using configuration file `/etc/pagure/pagure.cfg`")
|
|
Pierre-Yves Chibon |
9c2953 |
os.environ["PAGURE_CONFIG"] = "/etc/pagure/pagure.cfg"
|
|
Pierre-Yves Chibon |
079c2a |
|
|
Pierre-Yves Chibon |
b130e5 |
import pagure.config # noqa: E402
|
|
Pierre-Yves Chibon |
de6f12 |
import pagure.exceptions # noqa: E402
|
|
Pierre-Yves Chibon |
de6f12 |
import pagure.lib.git # noqa: E402
|
|
Pierre-Yves Chibon |
cf98be |
import pagure.lib.model_base # noqa: E402
|
|
Pierre-Yves Chibon |
930073 |
import pagure.lib.query # noqa: E402
|
|
Pierre-Yves Chibon |
1aac43 |
import pagure.lib.tasks_utils # noqa: E402
|
|
Pierre-Yves Chibon |
b130e5 |
from pagure.flask_app import generate_user_key_files # noqa: E402
|
|
Julen Landa Alustiza |
803bbd |
from pagure.utils import get_repo_path # noqa: E402
|
|
Pierre-Yves Chibon |
079c2a |
|
|
Pierre-Yves Chibon |
079c2a |
|
|
Pierre-Yves Chibon |
b130e5 |
_config = pagure.config.reload_config()
|
|
Pierre-Yves Chibon |
cf98be |
session = pagure.lib.model_base.create_session(_config["DB_URL"])
|
|
Pierre-Yves Chibon |
079c2a |
_log = logging.getLogger(__name__)
|
|
Pierre-Yves Chibon |
079c2a |
|
|
Pierre-Yves Chibon |
079c2a |
|
|
Pierre-Yves Chibon |
25e586 |
WATCH = {
|
|
Pierre-Yves Chibon |
9c2953 |
"-1": "reset the watch status to default",
|
|
Pierre-Yves Chibon |
9c2953 |
"0": "unwatch, don't notify the user of anything",
|
|
Pierre-Yves Chibon |
9c2953 |
"1": "watch issues and PRs",
|
|
Pierre-Yves Chibon |
9c2953 |
"2": "watch commits",
|
|
Pierre-Yves Chibon |
9c2953 |
"3": "watch issues, PRs and commits",
|
|
Pierre-Yves Chibon |
25e586 |
}
|
|
Pierre-Yves Chibon |
25e586 |
|
|
Pierre-Yves Chibon |
25e586 |
|
|
Pierre-Yves Chibon |
6bf258 |
def _parser_refresh_gitolite(subparser):
|
|
Pierre-Yves Chibon |
eddbd9 |
""" Set up the CLI argument parser for the refresh-gitolite action.
|
|
Pierre-Yves Chibon |
eddbd9 |
|
|
Pierre-Yves Chibon |
eddbd9 |
:arg subparser: an argparse subparser allowing to have action's specific
|
|
Pierre-Yves Chibon |
eddbd9 |
arguments
|
|
Pierre-Yves Chibon |
eddbd9 |
|
|
Pierre-Yves Chibon |
eddbd9 |
"""
|
|
Pierre-Yves Chibon |
6bf258 |
local_parser = subparser.add_parser(
|
|
Pierre-Yves Chibon |
9c2953 |
"refresh-gitolite", help="Re-generate the gitolite config file"
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
ede948 |
local_parser.add_argument(
|
|
Pierre-Yves Chibon |
9c2953 |
"--user", help="User of the project (to use only on forks)"
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
ede948 |
local_parser.add_argument(
|
|
Pierre-Yves Chibon |
9c2953 |
"--project",
|
|
Pierre-Yves Chibon |
9c2953 |
help="Project to update (as namespace/project if there "
|
|
Pierre-Yves Chibon |
9c2953 |
"is a namespace)",
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
9c2953 |
local_parser.add_argument("--group", help="Group to refresh")
|
|
Pierre-Yves Chibon |
ede948 |
local_parser.add_argument(
|
|
Pierre-Yves Chibon |
9c2953 |
"--all",
|
|
Pierre-Yves Chibon |
9c2953 |
dest="all_",
|
|
Pierre-Yves Chibon |
9c2953 |
default=False,
|
|
Pierre-Yves Chibon |
9c2953 |
action="store_true",
|
|
Pierre-Yves Chibon |
9c2953 |
help="Refresh all the projects",
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
6bf258 |
local_parser.set_defaults(func=do_generate_acl)
|
|
Pierre-Yves Chibon |
079c2a |
|
|
Pierre-Yves Chibon |
6bf258 |
|
|
Pierre-Yves Chibon |
6bf258 |
def _parser_refresh_ssh(subparser):
|
|
Pierre-Yves Chibon |
eddbd9 |
""" Set up the CLI argument parser for the refresh-ssh action.
|
|
Pierre-Yves Chibon |
eddbd9 |
|
|
Pierre-Yves Chibon |
eddbd9 |
:arg subparser: an argparse subparser allowing to have action's specific
|
|
Pierre-Yves Chibon |
eddbd9 |
arguments
|
|
Pierre-Yves Chibon |
eddbd9 |
|
|
Pierre-Yves Chibon |
eddbd9 |
"""
|
|
Pierre-Yves Chibon |
6bf258 |
local_parser = subparser.add_parser(
|
|
Pierre-Yves Chibon |
9c2953 |
"refresh-ssh",
|
|
Pierre-Yves Chibon |
9c2953 |
help="Re-write to disk every user's ssh key stored in the database",
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
6bf258 |
local_parser.set_defaults(func=do_refresh_ssh)
|
|
Pierre-Yves Chibon |
079c2a |
|
|
Pierre-Yves Chibon |
6bf258 |
|
|
Pierre-Yves Chibon |
6bf258 |
def _parser_clear_hook_token(subparser):
|
|
Pierre-Yves Chibon |
eddbd9 |
""" Set up the CLI argument parser for the clear-hook-token action.
|
|
Pierre-Yves Chibon |
eddbd9 |
|
|
Pierre-Yves Chibon |
eddbd9 |
:arg subparser: an argparse subparser allowing to have action's specific
|
|
Pierre-Yves Chibon |
eddbd9 |
arguments
|
|
Pierre-Yves Chibon |
eddbd9 |
|
|
Pierre-Yves Chibon |
eddbd9 |
"""
|
|
Pierre-Yves Chibon |
6bf258 |
local_parser = subparser.add_parser(
|
|
Pierre-Yves Chibon |
9c2953 |
"clear-hook-token",
|
|
Pierre-Yves Chibon |
9c2953 |
help="Generate a new hook token for every project in this instance",
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
6bf258 |
local_parser.set_defaults(func=do_generate_hook_token)
|
|
Pierre-Yves Chibon |
af5184 |
|
|
Pierre-Yves Chibon |
af5184 |
|
|
Pierre-Yves Chibon |
6bf258 |
def _parser_admin_token_list(subparser):
|
|
Pierre-Yves Chibon |
eddbd9 |
""" Set up the CLI argument parser for the admin-token list action.
|
|
Pierre-Yves Chibon |
eddbd9 |
|
|
Pierre-Yves Chibon |
eddbd9 |
:arg subparser: an argparse subparser allowing to have action's specific
|
|
Pierre-Yves Chibon |
eddbd9 |
arguments
|
|
Pierre-Yves Chibon |
eddbd9 |
|
|
Pierre-Yves Chibon |
eddbd9 |
"""
|
|
Pierre-Yves Chibon |
6bf258 |
local_parser = subparser.add_parser(
|
|
Pierre-Yves Chibon |
9c2953 |
"list", help="List the API admin token"
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
6bf258 |
local_parser.add_argument(
|
|
Pierre-Yves Chibon |
9c2953 |
"--user", help="User to associate or associated with the token"
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
9c2953 |
local_parser.add_argument("--token", help="API token")
|
|
Pierre-Yves Chibon |
6bf258 |
local_parser.add_argument(
|
|
Pierre-Yves Chibon |
9c2953 |
"--active",
|
|
Pierre-Yves Chibon |
9c2953 |
default=False,
|
|
Pierre-Yves Chibon |
9c2953 |
action="store_true",
|
|
Pierre-Yves Chibon |
9c2953 |
help="Only list active API token",
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
6bf258 |
local_parser.add_argument(
|
|
Pierre-Yves Chibon |
9c2953 |
"--expired",
|
|
Pierre-Yves Chibon |
9c2953 |
default=False,
|
|
Pierre-Yves Chibon |
9c2953 |
action="store_true",
|
|
Pierre-Yves Chibon |
9c2953 |
help="Only list expired API token",
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
f3c6b4 |
local_parser.add_argument(
|
|
Pierre-Yves Chibon |
9c2953 |
"--all",
|
|
Pierre-Yves Chibon |
9c2953 |
default=False,
|
|
Pierre-Yves Chibon |
9c2953 |
action="store_true",
|
|
Pierre-Yves Chibon |
9c2953 |
help="Only list all API token instead of only those with admin ACLs",
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
6bf258 |
local_parser.set_defaults(func=do_list_admin_token)
|
|
Pierre-Yves Chibon |
6bf258 |
|
|
Pierre-Yves Chibon |
af5184 |
|
|
Pierre-Yves Chibon |
6bf258 |
def _parser_admin_token_info(subparser):
|
|
Pierre-Yves Chibon |
eddbd9 |
""" Set up the CLI argument parser for the admin-token info action.
|
|
Pierre-Yves Chibon |
eddbd9 |
|
|
Pierre-Yves Chibon |
eddbd9 |
:arg subparser: an argparse subparser allowing to have action's specific
|
|
Pierre-Yves Chibon |
eddbd9 |
arguments
|
|
Pierre-Yves Chibon |
eddbd9 |
|
|
Pierre-Yves Chibon |
eddbd9 |
"""
|
|
Pierre-Yves Chibon |
6bf258 |
local_parser = subparser.add_parser(
|
|
Pierre-Yves Chibon |
9c2953 |
"info", help="Provide some information about a specific API token"
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
9c2953 |
local_parser.add_argument("token", help="API token")
|
|
Pierre-Yves Chibon |
6bf258 |
local_parser.set_defaults(func=do_info_admin_token)
|
|
Pierre-Yves Chibon |
6bf258 |
|
|
Pierre-Yves Chibon |
af5184 |
|
|
Pierre-Yves Chibon |
6bf258 |
def _parser_admin_token_expire(subparser):
|
|
Pierre-Yves Chibon |
eddbd9 |
""" Set up the CLI argument parser for the admin-token expire action.
|
|
Pierre-Yves Chibon |
eddbd9 |
|
|
Pierre-Yves Chibon |
eddbd9 |
:arg subparser: an argparse subparser allowing to have action's specific
|
|
Pierre-Yves Chibon |
eddbd9 |
arguments
|
|
Pierre-Yves Chibon |
eddbd9 |
|
|
Pierre-Yves Chibon |
eddbd9 |
"""
|
|
Pierre-Yves Chibon |
af5184 |
# Expire admin token
|
|
Pierre-Yves Chibon |
6bf258 |
local_parser = subparser.add_parser(
|
|
Pierre-Yves Chibon |
9c2953 |
"expire", help="Expire a specific API token"
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
9c2953 |
local_parser.add_argument("token", help="API token")
|
|
Pierre-Yves Chibon |
6bf258 |
local_parser.set_defaults(func=do_expire_admin_token)
|
|
Pierre-Yves Chibon |
af5184 |
|
|
Pierre-Yves Chibon |
6bf258 |
|
|
Pierre-Yves Chibon |
6bf258 |
def _parser_admin_token_create(subparser):
|
|
Pierre-Yves Chibon |
eddbd9 |
""" Set up the CLI argument parser for the admin-token create action.
|
|
Pierre-Yves Chibon |
eddbd9 |
|
|
Pierre-Yves Chibon |
eddbd9 |
:arg subparser: an argparse subparser allowing to have action's specific
|
|
Pierre-Yves Chibon |
eddbd9 |
arguments
|
|
Pierre-Yves Chibon |
eddbd9 |
|
|
Pierre-Yves Chibon |
eddbd9 |
"""
|
|
Pierre-Yves Chibon |
af5184 |
# Create admin token
|
|
Pierre-Yves Chibon |
6bf258 |
local_parser = subparser.add_parser(
|
|
Pierre-Yves Chibon |
9c2953 |
"create", help="Create a new API token"
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
9c2953 |
local_parser.add_argument("user", help="User to associate with the token")
|
|
Pierre-Yves Chibon |
6bf258 |
local_parser.set_defaults(func=do_create_admin_token)
|
|
Pierre-Yves Chibon |
6bf258 |
|
|
Pierre-Yves Chibon |
6bf258 |
|
|
Pierre-Yves Chibon |
87a6d0 |
def _parser_admin_token_update(subparser):
|
|
Pierre-Yves Chibon |
eddbd9 |
""" Set up the CLI argument parser for the admin-token update action.
|
|
Pierre-Yves Chibon |
eddbd9 |
|
|
Pierre-Yves Chibon |
eddbd9 |
:arg subparser: an argparse subparser allowing to have action's specific
|
|
Pierre-Yves Chibon |
eddbd9 |
arguments
|
|
Pierre-Yves Chibon |
eddbd9 |
|
|
Pierre-Yves Chibon |
eddbd9 |
"""
|
|
Pierre-Yves Chibon |
87a6d0 |
# Update admin token
|
|
Pierre-Yves Chibon |
87a6d0 |
local_parser = subparser.add_parser(
|
|
Pierre-Yves Chibon |
9c2953 |
"update", help="Update the expiration date of an API token"
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
9c2953 |
local_parser.add_argument("token", help="API token")
|
|
Pierre-Yves Chibon |
9c2953 |
local_parser.add_argument("date", help="New expiration date")
|
|
Pierre-Yves Chibon |
87a6d0 |
local_parser.set_defaults(func=do_update_admin_token)
|
|
Pierre-Yves Chibon |
87a6d0 |
|
|
Pierre-Yves Chibon |
87a6d0 |
|
|
Pierre-Yves Chibon |
6bf258 |
def _parser_admin_token(subparser):
|
|
Pierre-Yves Chibon |
eddbd9 |
""" Set up the CLI argument parser for the admin-token action.
|
|
Pierre-Yves Chibon |
eddbd9 |
|
|
Pierre-Yves Chibon |
eddbd9 |
:arg subparser: an argparse subparser allowing to have action's specific
|
|
Pierre-Yves Chibon |
eddbd9 |
arguments
|
|
Pierre-Yves Chibon |
eddbd9 |
|
|
Pierre-Yves Chibon |
eddbd9 |
"""
|
|
Pierre-Yves Chibon |
6bf258 |
local_parser = subparser.add_parser(
|
|
Pierre-Yves Chibon |
9c2953 |
"admin-token", help="Manages the admin tokens for this instance"
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
6bf258 |
|
|
Pierre-Yves Chibon |
9c2953 |
subsubparser = local_parser.add_subparsers(title="actions")
|
|
Pierre-Yves Chibon |
6bf258 |
|
|
Pierre-Yves Chibon |
6bf258 |
# list
|
|
Pierre-Yves Chibon |
6bf258 |
_parser_admin_token_list(subsubparser)
|
|
Pierre-Yves Chibon |
6bf258 |
# info
|
|
Pierre-Yves Chibon |
6bf258 |
_parser_admin_token_info(subsubparser)
|
|
Pierre-Yves Chibon |
6bf258 |
# expire
|
|
Pierre-Yves Chibon |
6bf258 |
_parser_admin_token_expire(subsubparser)
|
|
Pierre-Yves Chibon |
6bf258 |
# create
|
|
Pierre-Yves Chibon |
6bf258 |
_parser_admin_token_create(subsubparser)
|
|
Pierre-Yves Chibon |
87a6d0 |
# update
|
|
Pierre-Yves Chibon |
87a6d0 |
_parser_admin_token_update(subsubparser)
|
|
Pierre-Yves Chibon |
6bf258 |
|
|
Pierre-Yves Chibon |
6bf258 |
|
|
Pierre-Yves Chibon |
25e586 |
def _parser_get_watch(subparser):
|
|
Pierre-Yves Chibon |
eddbd9 |
""" Set up the CLI argument parser for the get-watch action.
|
|
Pierre-Yves Chibon |
eddbd9 |
|
|
Pierre-Yves Chibon |
eddbd9 |
:arg subparser: an argparse subparser allowing to have action's specific
|
|
Pierre-Yves Chibon |
eddbd9 |
arguments
|
|
Pierre-Yves Chibon |
eddbd9 |
|
|
Pierre-Yves Chibon |
eddbd9 |
"""
|
|
Pierre-Yves Chibon |
25e586 |
# Update watch status
|
|
Pierre-Yves Chibon |
25e586 |
local_parser = subparser.add_parser(
|
|
Pierre-Yves Chibon |
9c2953 |
"get-watch", help="Get someone's watch status on a project"
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
25e586 |
local_parser.add_argument(
|
|
Pierre-Yves Chibon |
9c2953 |
"project",
|
|
Pierre-Yves Chibon |
9c2953 |
help="Project (as namespace/project if there "
|
|
Pierre-Yves Chibon |
9c2953 |
"is a namespace) -- Fork not supported",
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
9c2953 |
local_parser.add_argument("user", help="User to get the watch status of")
|
|
Pierre-Yves Chibon |
25e586 |
local_parser.set_defaults(func=do_get_watch_status)
|
|
Pierre-Yves Chibon |
25e586 |
|
|
Pierre-Yves Chibon |
25e586 |
|
|
Pierre-Yves Chibon |
25e586 |
def _parser_update_watch(subparser):
|
|
Pierre-Yves Chibon |
eddbd9 |
""" Set up the CLI argument parser for the update-watch action.
|
|
Pierre-Yves Chibon |
eddbd9 |
|
|
Pierre-Yves Chibon |
eddbd9 |
:arg subparser: an argparse subparser allowing to have action's specific
|
|
Pierre-Yves Chibon |
eddbd9 |
arguments
|
|
Pierre-Yves Chibon |
eddbd9 |
|
|
Pierre-Yves Chibon |
eddbd9 |
"""
|
|
Pierre-Yves Chibon |
25e586 |
# Update watch status
|
|
Pierre-Yves Chibon |
25e586 |
local_parser = subparser.add_parser(
|
|
Pierre-Yves Chibon |
9c2953 |
"update-watch", help="Update someone's watch status on a project"
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
25e586 |
local_parser.add_argument(
|
|
Pierre-Yves Chibon |
9c2953 |
"project",
|
|
Pierre-Yves Chibon |
9c2953 |
help="Project to update (as namespace/project if there "
|
|
Pierre-Yves Chibon |
9c2953 |
"is a namespace) -- Fork not supported",
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
25e586 |
local_parser.add_argument(
|
|
Pierre-Yves Chibon |
9c2953 |
"user", help="User to update the watch status of"
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
25e586 |
local_parser.add_argument(
|
|
Pierre-Yves Chibon |
9c2953 |
"-s", "--status", help="Watch status to update to"
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
25e586 |
local_parser.set_defaults(func=do_update_watch_status)
|
|
Pierre-Yves Chibon |
25e586 |
|
|
Pierre-Yves Chibon |
25e586 |
|
|
Pierre-Yves Chibon |
3a016c |
def _parser_read_only(subparser):
|
|
Pierre-Yves Chibon |
ffbe63 |
""" Set up the CLI argument parser for the read-only action.
|
|
Pierre-Yves Chibon |
eddbd9 |
|
|
Pierre-Yves Chibon |
eddbd9 |
:arg subparser: an argparse subparser allowing to have action's specific
|
|
Pierre-Yves Chibon |
eddbd9 |
arguments
|
|
Pierre-Yves Chibon |
eddbd9 |
|
|
Pierre-Yves Chibon |
eddbd9 |
"""
|
|
Pierre-Yves Chibon |
3a016c |
local_parser = subparser.add_parser(
|
|
Pierre-Yves Chibon |
9c2953 |
"read-only", help="Get or set the read-only flag on a project"
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
3a016c |
local_parser.add_argument(
|
|
Pierre-Yves Chibon |
9c2953 |
"--user", help="User of the project (to use only on forks)"
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
3a016c |
local_parser.add_argument(
|
|
Pierre-Yves Chibon |
9c2953 |
"project",
|
|
Pierre-Yves Chibon |
9c2953 |
help="Project to update (as namespace/project if there "
|
|
Pierre-Yves Chibon |
9c2953 |
"is a namespace)",
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
3a016c |
local_parser.add_argument(
|
|
Pierre-Yves Chibon |
9c2953 |
"--ro",
|
|
Pierre-Yves Chibon |
3a016c |
help="Read-Only status to set (has to be: true or false), do not "
|
|
Pierre-Yves Chibon |
9c2953 |
"specify to get the current status",
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
3a016c |
local_parser.set_defaults(func=do_read_only)
|
|
Pierre-Yves Chibon |
3a016c |
|
|
Pierre-Yves Chibon |
d0b0b3 |
|
|
Pierre-Yves Chibon |
ffbe63 |
def _parser_new_group(subparser):
|
|
Pierre-Yves Chibon |
ffbe63 |
""" Set up the CLI argument parser for the new-group action.
|
|
Pierre-Yves Chibon |
ffbe63 |
|
|
Pierre-Yves Chibon |
ffbe63 |
:arg subparser: an argparse subparser allowing to have action's specific
|
|
Pierre-Yves Chibon |
ffbe63 |
arguments
|
|
Pierre-Yves Chibon |
ffbe63 |
|
|
Pierre-Yves Chibon |
ffbe63 |
"""
|
|
Pierre-Yves Chibon |
ffbe63 |
local_parser = subparser.add_parser(
|
|
Pierre-Yves Chibon |
9c2953 |
"new-group", help="Create a new group on this pagure instance"
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
9c2953 |
local_parser.add_argument("group_name", help="Name of the group")
|
|
Pierre-Yves Chibon |
ffbe63 |
local_parser.add_argument(
|
|
Pierre-Yves Chibon |
9c2953 |
"username",
|
|
Pierre-Yves Chibon |
ffbe63 |
help="Name of the user creating the group "
|
|
Pierre-Yves Chibon |
9c2953 |
"(will be added to the group once created)",
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
9c2953 |
local_parser.add_argument("--display", help="Display name of the group")
|
|
Pierre-Yves Chibon |
ffbe63 |
local_parser.add_argument(
|
|
Pierre-Yves Chibon |
9c2953 |
"--description", help="Short description of the group"
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
ffbe63 |
local_parser.set_defaults(func=do_new_group)
|
|
Pierre-Yves Chibon |
ffbe63 |
|
|
Pierre-Yves Chibon |
ffbe63 |
|
|
Fabian Arrotin |
0096c9 |
def _parser_list_groups(subparser):
|
|
Fabian Arrotin |
0096c9 |
""" Set up the CLI argument parser for the list-groups action.
|
|
Fabian Arrotin |
0096c9 |
|
|
Fabian Arrotin |
0096c9 |
:arg subparser: an argparse subparser allowing to have action's specific
|
|
Fabian Arrotin |
0096c9 |
arguments
|
|
Fabian Arrotin |
0096c9 |
|
|
Fabian Arrotin |
0096c9 |
"""
|
|
Fabian Arrotin |
0096c9 |
local_parser = subparser.add_parser(
|
|
Fabian Arrotin |
0096c9 |
"list-groups", help="Lists existing groups on this pagure instance"
|
|
Fabian Arrotin |
0096c9 |
)
|
|
Fabian Arrotin |
0096c9 |
local_parser.set_defaults(func=do_list_groups)
|
|
Fabian Arrotin |
0096c9 |
|
|
Fabian Arrotin |
0096c9 |
|
|
Pierre-Yves Chibon |
bee78a |
def _parser_block_user(subparser):
|
|
Pierre-Yves Chibon |
bee78a |
""" Set up the CLI argument parser for the block-user action.
|
|
Pierre-Yves Chibon |
bee78a |
|
|
Pierre-Yves Chibon |
bee78a |
:arg subparser: an argparse subparser allowing to have action's specific
|
|
Pierre-Yves Chibon |
bee78a |
arguments
|
|
Pierre-Yves Chibon |
bee78a |
|
|
Pierre-Yves Chibon |
bee78a |
"""
|
|
Pierre-Yves Chibon |
bee78a |
local_parser = subparser.add_parser(
|
|
Pierre-Yves Chibon |
9c2953 |
"block-user",
|
|
Pierre-Yves Chibon |
9c2953 |
help="Prevents an user to interact with this pagure instance until "
|
|
Pierre-Yves Chibon |
9c2953 |
"the specified date",
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
6e0576 |
local_parser.add_argument(
|
|
Pierre-Yves Chibon |
6e0576 |
"username", default=None, nargs="?", help="Name of the user to block"
|
|
Pierre-Yves Chibon |
6e0576 |
)
|
|
Pierre-Yves Chibon |
bee78a |
local_parser.add_argument(
|
|
Pierre-Yves Chibon |
9c2953 |
"date",
|
|
Pierre-Yves Chibon |
6e0576 |
nargs="?",
|
|
Pierre-Yves Chibon |
9c2953 |
default=None,
|
|
Pierre-Yves Chibon |
9c2953 |
help="Date before which the user is not welcome on this pagure "
|
|
Pierre-Yves Chibon |
9c2953 |
"instance",
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
6e0576 |
local_parser.add_argument(
|
|
Pierre-Yves Chibon |
6e0576 |
"--list",
|
|
Pierre-Yves Chibon |
6e0576 |
default=False,
|
|
Pierre-Yves Chibon |
6e0576 |
action="store_true",
|
|
Pierre-Yves Chibon |
6e0576 |
help="List all blocked users",
|
|
Pierre-Yves Chibon |
6e0576 |
)
|
|
Pierre-Yves Chibon |
bee78a |
local_parser.set_defaults(func=do_block_user)
|
|
Pierre-Yves Chibon |
bee78a |
|
|
Pierre-Yves Chibon |
bee78a |
|
|
Patrick Uiterwijk |
d29158 |
def _parser_upload_repospanner_hooks(subparser):
|
|
Patrick Uiterwijk |
d29158 |
""" Set up the CLI argument parser to upload repospanner hook.
|
|
Patrick Uiterwijk |
d29158 |
|
|
Patrick Uiterwijk |
d29158 |
Args:
|
|
Patrick Uiterwijk |
d29158 |
subparser: An argparse subparser
|
|
Patrick Uiterwijk |
d29158 |
"""
|
|
Patrick Uiterwijk |
d29158 |
local_parser = subparser.add_parser(
|
|
Patrick Uiterwijk |
d29158 |
"upload-repospanner-hook", help="Upload repoSpanner hook script"
|
|
Patrick Uiterwijk |
d29158 |
)
|
|
Patrick Uiterwijk |
d29158 |
local_parser.add_argument(
|
|
Patrick Uiterwijk |
d29158 |
"region", help="repoSpanner region where to " "upload hook"
|
|
Patrick Uiterwijk |
d29158 |
)
|
|
Patrick Uiterwijk |
d29158 |
local_parser.set_defaults(func=do_upload_repospanner_hooks)
|
|
Patrick Uiterwijk |
d29158 |
|
|
Patrick Uiterwijk |
d29158 |
|
|
Patrick Uiterwijk |
d29158 |
def _parser_ensure_project_hooks(subparser):
|
|
Patrick Uiterwijk |
d29158 |
""" Set up the CLI argument parser to ensure project hooks are setup
|
|
Patrick Uiterwijk |
d29158 |
|
|
Patrick Uiterwijk |
d29158 |
Args:
|
|
Patrick Uiterwijk |
d29158 |
subparser: An argparse subparser
|
|
Patrick Uiterwijk |
d29158 |
"""
|
|
Patrick Uiterwijk |
d29158 |
local_parser = subparser.add_parser(
|
|
Patrick Uiterwijk |
d29158 |
"ensure-project-hooks",
|
|
Patrick Uiterwijk |
d29158 |
help="Ensure all projects have their hooks setup",
|
|
Patrick Uiterwijk |
d29158 |
)
|
|
Patrick Uiterwijk |
d29158 |
local_parser.add_argument(
|
|
Patrick Uiterwijk |
d29158 |
"hook", help="repoSpanner hook ID to set", default=None
|
|
Patrick Uiterwijk |
d29158 |
)
|
|
Patrick Uiterwijk |
d29158 |
local_parser.set_defaults(func=do_ensure_project_hooks)
|
|
Patrick Uiterwijk |
d29158 |
|
|
Patrick Uiterwijk |
d29158 |
|
|
Pierre-Yves Chibon |
74b8f8 |
def _parser_delete_project(subparser):
|
|
Pierre-Yves Chibon |
74b8f8 |
""" Set up the CLI argument parser for the delete-project action.
|
|
Pierre-Yves Chibon |
74b8f8 |
|
|
Pierre-Yves Chibon |
74b8f8 |
:arg subparser: an argparse subparser allowing to have action's specific
|
|
Pierre-Yves Chibon |
74b8f8 |
arguments
|
|
Pierre-Yves Chibon |
74b8f8 |
|
|
Pierre-Yves Chibon |
74b8f8 |
"""
|
|
Pierre-Yves Chibon |
74b8f8 |
local_parser = subparser.add_parser(
|
|
Pierre-Yves Chibon |
74b8f8 |
"delete-project", help="Delete the project specified"
|
|
Pierre-Yves Chibon |
74b8f8 |
)
|
|
Pierre-Yves Chibon |
74b8f8 |
local_parser.add_argument(
|
|
Pierre-Yves Chibon |
74b8f8 |
"--user", help="User of the project (to use only on forks)"
|
|
Pierre-Yves Chibon |
74b8f8 |
)
|
|
Pierre-Yves Chibon |
74b8f8 |
local_parser.add_argument(
|
|
Pierre-Yves Chibon |
74b8f8 |
"project",
|
|
Pierre-Yves Chibon |
74b8f8 |
help="Project to update (as namespace/project if there "
|
|
Pierre-Yves Chibon |
74b8f8 |
"is a namespace)",
|
|
Pierre-Yves Chibon |
74b8f8 |
)
|
|
Pierre-Yves Chibon |
74b8f8 |
local_parser.add_argument(
|
|
Pierre-Yves Chibon |
74b8f8 |
"action_user",
|
|
Pierre-Yves Chibon |
74b8f8 |
help="Username of the user doing the action (ie: deleting the "
|
|
Pierre-Yves Chibon |
74b8f8 |
"project)",
|
|
Pierre-Yves Chibon |
74b8f8 |
)
|
|
Pierre-Yves Chibon |
74b8f8 |
local_parser.set_defaults(func=do_delete_project)
|
|
Pierre-Yves Chibon |
74b8f8 |
|
|
Pierre-Yves Chibon |
74b8f8 |
|
|
Pierre-Yves Chibon |
a10996 |
def _parser_create_branch(subparser):
|
|
Pierre-Yves Chibon |
a10996 |
""" Set up the CLI argument parser for the create-branch action.
|
|
Pierre-Yves Chibon |
a10996 |
|
|
Pierre-Yves Chibon |
a10996 |
:arg subparser: an argparse subparser allowing to have action's specific
|
|
Pierre-Yves Chibon |
a10996 |
arguments
|
|
Pierre-Yves Chibon |
a10996 |
|
|
Pierre-Yves Chibon |
a10996 |
"""
|
|
Pierre-Yves Chibon |
a10996 |
local_parser = subparser.add_parser(
|
|
Pierre-Yves Chibon |
a10996 |
"create-branch",
|
|
Pierre-Yves Chibon |
a10996 |
help="Create the specified branch in the specified project",
|
|
Pierre-Yves Chibon |
a10996 |
)
|
|
Pierre-Yves Chibon |
a10996 |
local_parser.add_argument(
|
|
Pierre-Yves Chibon |
a10996 |
"--user", help="User of the project (to use only on forks)"
|
|
Pierre-Yves Chibon |
a10996 |
)
|
|
Pierre-Yves Chibon |
a10996 |
local_parser.add_argument(
|
|
Pierre-Yves Chibon |
a10996 |
"project",
|
|
Pierre-Yves Chibon |
a10996 |
help="Project to update (as namespace/project if there "
|
|
Pierre-Yves Chibon |
a10996 |
"is a namespace)",
|
|
Pierre-Yves Chibon |
a10996 |
)
|
|
Pierre-Yves Chibon |
a10996 |
local_parser.add_argument(
|
|
Pierre-Yves Chibon |
a10996 |
"--from-branch",
|
|
Pierre-Yves Chibon |
a10996 |
default=None,
|
|
Pierre-Yves Chibon |
a10996 |
help="Name of the branch on which to base the new one",
|
|
Pierre-Yves Chibon |
a10996 |
)
|
|
Pierre-Yves Chibon |
a10996 |
local_parser.add_argument(
|
|
Pierre-Yves Chibon |
a10996 |
"--from-commit",
|
|
Pierre-Yves Chibon |
a10996 |
default=None,
|
|
Pierre-Yves Chibon |
a10996 |
help="Commit on which to base the new branch",
|
|
Pierre-Yves Chibon |
a10996 |
)
|
|
Pierre-Yves Chibon |
a10996 |
local_parser.add_argument(
|
|
Pierre-Yves Chibon |
a10996 |
"new_branch", help="Name of the new branch to create"
|
|
Pierre-Yves Chibon |
a10996 |
)
|
|
Pierre-Yves Chibon |
a10996 |
local_parser.add_argument(
|
|
Pierre-Yves Chibon |
a10996 |
"action_user",
|
|
Pierre-Yves Chibon |
a10996 |
help="Username of the user doing the action (ie: creating the "
|
|
Pierre-Yves Chibon |
a10996 |
"branch)",
|
|
Pierre-Yves Chibon |
a10996 |
)
|
|
Pierre-Yves Chibon |
a10996 |
local_parser.set_defaults(func=do_create_branch)
|
|
Pierre-Yves Chibon |
a10996 |
|
|
Pierre-Yves Chibon |
a10996 |
|
|
Julen Landa Alustiza |
803bbd |
def _parser_set_default_branch(subparser):
|
|
Julen Landa Alustiza |
803bbd |
""" Set up the CLI argument parser for the set-default-branch action.
|
|
Julen Landa Alustiza |
803bbd |
|
|
Julen Landa Alustiza |
803bbd |
:arg subparser: an argparse subparser allowing to have action's specific
|
|
Julen Landa Alustiza |
803bbd |
arguments
|
|
Julen Landa Alustiza |
803bbd |
|
|
Julen Landa Alustiza |
803bbd |
"""
|
|
Julen Landa Alustiza |
803bbd |
local_parser = subparser.add_parser(
|
|
Julen Landa Alustiza |
803bbd |
"set-default-branch", help="Set the specified branch as default"
|
|
Julen Landa Alustiza |
803bbd |
)
|
|
Julen Landa Alustiza |
803bbd |
local_parser.add_argument(
|
|
Julen Landa Alustiza |
803bbd |
"project",
|
|
Julen Landa Alustiza |
803bbd |
help="Project to update (as namespace/project if there "
|
|
Julen Landa Alustiza |
803bbd |
"is a namespace)",
|
|
Julen Landa Alustiza |
803bbd |
)
|
|
Julen Landa Alustiza |
803bbd |
local_parser.add_argument(
|
|
Julen Landa Alustiza |
803bbd |
"--user", help="User of the project (to use only on forks)"
|
|
Julen Landa Alustiza |
803bbd |
)
|
|
Julen Landa Alustiza |
803bbd |
local_parser.add_argument(
|
|
Julen Landa Alustiza |
803bbd |
"branch", help="Name of the branch to be set as default"
|
|
Julen Landa Alustiza |
803bbd |
)
|
|
Julen Landa Alustiza |
803bbd |
local_parser.set_defaults(func=do_set_default_branch)
|
|
Julen Landa Alustiza |
803bbd |
|
|
Julen Landa Alustiza |
803bbd |
|
|
Aurélien Bompard |
a29742 |
def parse_arguments(args=None):
|
|
Pierre-Yves Chibon |
6bf258 |
""" Set-up the argument parsing. """
|
|
Pierre-Yves Chibon |
6bf258 |
parser = argparse.ArgumentParser(
|
|
Pierre-Yves Chibon |
9c2953 |
description="The admin CLI for this pagure instance"
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
6bf258 |
|
|
Pierre-Yves Chibon |
6bf258 |
parser.add_argument(
|
|
Pierre-Yves Chibon |
9c2953 |
"-c", "--config", default=None, help="Specify a configuration to use"
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
b130e5 |
|
|
Pierre-Yves Chibon |
b130e5 |
parser.add_argument(
|
|
Pierre-Yves Chibon |
9c2953 |
"--debug",
|
|
Pierre-Yves Chibon |
9c2953 |
default=False,
|
|
Pierre-Yves Chibon |
9c2953 |
action="store_true",
|
|
Pierre-Yves Chibon |
9c2953 |
help="Increase the verbosity of the information displayed",
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
7c3688 |
|
|
Pierre-Yves Chibon |
9c2953 |
subparser = parser.add_subparsers(title="actions")
|
|
Pierre-Yves Chibon |
6bf258 |
|
|
Pierre-Yves Chibon |
6bf258 |
# refresh-gitolite
|
|
Pierre-Yves Chibon |
6bf258 |
_parser_refresh_gitolite(subparser)
|
|
Pierre-Yves Chibon |
6bf258 |
|
|
Pierre-Yves Chibon |
6bf258 |
# refresh-ssh
|
|
Pierre-Yves Chibon |
6bf258 |
_parser_refresh_ssh(subparser)
|
|
Pierre-Yves Chibon |
6bf258 |
|
|
Pierre-Yves Chibon |
6bf258 |
# clear-hook-token
|
|
Pierre-Yves Chibon |
6bf258 |
_parser_clear_hook_token(subparser)
|
|
Pierre-Yves Chibon |
6bf258 |
|
|
Pierre-Yves Chibon |
6bf258 |
# Admin token actions
|
|
Pierre-Yves Chibon |
6bf258 |
_parser_admin_token(subparser)
|
|
Pierre-Yves Chibon |
af5184 |
|
|
Pierre-Yves Chibon |
25e586 |
# get-watch
|
|
Pierre-Yves Chibon |
25e586 |
_parser_get_watch(subparser)
|
|
Pierre-Yves Chibon |
25e586 |
|
|
Pierre-Yves Chibon |
25e586 |
# update-watch
|
|
Pierre-Yves Chibon |
25e586 |
_parser_update_watch(subparser)
|
|
Pierre-Yves Chibon |
25e586 |
|
|
Pierre-Yves Chibon |
3a016c |
# read-only
|
|
Pierre-Yves Chibon |
3a016c |
_parser_read_only(subparser)
|
|
Pierre-Yves Chibon |
3a016c |
|
|
Pierre-Yves Chibon |
ffbe63 |
# new-group
|
|
Pierre-Yves Chibon |
ffbe63 |
_parser_new_group(subparser)
|
|
Pierre-Yves Chibon |
ffbe63 |
|
|
Fabian Arrotin |
0096c9 |
# list-groups
|
|
Fabian Arrotin |
0096c9 |
_parser_list_groups(subparser)
|
|
Fabian Arrotin |
0096c9 |
|
|
Pierre-Yves Chibon |
bee78a |
# block-user
|
|
Pierre-Yves Chibon |
bee78a |
_parser_block_user(subparser)
|
|
Pierre-Yves Chibon |
bee78a |
|
|
Patrick Uiterwijk |
d29158 |
# upload-repospanner-hooks
|
|
Patrick Uiterwijk |
d29158 |
_parser_upload_repospanner_hooks(subparser)
|
|
Patrick Uiterwijk |
d29158 |
|
|
Patrick Uiterwijk |
d29158 |
# ensure-project-hooks
|
|
Patrick Uiterwijk |
d29158 |
_parser_ensure_project_hooks(subparser)
|
|
Patrick Uiterwijk |
d29158 |
|
|
Pierre-Yves Chibon |
74b8f8 |
# delete-project
|
|
Pierre-Yves Chibon |
74b8f8 |
_parser_delete_project(subparser)
|
|
Pierre-Yves Chibon |
74b8f8 |
|
|
Pierre-Yves Chibon |
a10996 |
# create-branch
|
|
Pierre-Yves Chibon |
a10996 |
_parser_create_branch(subparser)
|
|
Pierre-Yves Chibon |
a10996 |
|
|
Julen Landa Alustiza |
803bbd |
# set-default-branch
|
|
Julen Landa Alustiza |
803bbd |
_parser_set_default_branch(subparser)
|
|
Julen Landa Alustiza |
803bbd |
|
|
Aurélien Bompard |
a29742 |
return parser.parse_args(args)
|
|
Pierre-Yves Chibon |
079c2a |
|
|
Pierre-Yves Chibon |
079c2a |
|
|
Pierre-Yves Chibon |
079c2a |
def _ask_confirmation():
|
|
Pierre-Yves Chibon |
9c2953 |
""" Ask to confirm an action.
|
|
Pierre-Yves Chibon |
9c2953 |
"""
|
|
Pierre-Yves Chibon |
9c2953 |
action = input("Do you want to continue? [y/N]")
|
|
Pierre-Yves Chibon |
9c2953 |
return action.lower() in ["y", "yes"]
|
|
Pierre-Yves Chibon |
079c2a |
|
|
Pierre-Yves Chibon |
079c2a |
|
|
Pierre-Yves Chibon |
12c3d1 |
def _get_input(text):
|
|
Pierre-Yves Chibon |
9c2953 |
""" Ask the user for input. """
|
|
Aurélien Bompard |
831553 |
return input(text)
|
|
Pierre-Yves Chibon |
12c3d1 |
|
|
Pierre-Yves Chibon |
12c3d1 |
|
|
Pierre-Yves Chibon |
25e586 |
def _get_project(arg_project, user=None):
|
|
Pierre-Yves Chibon |
9c2953 |
""" From the project specified to the CLI, extract the actual project.
|
|
Pierre-Yves Chibon |
9c2953 |
"""
|
|
Pierre-Yves Chibon |
25e586 |
namespace = None
|
|
Pierre-Yves Chibon |
9c2953 |
if "/" in arg_project:
|
|
Pierre-Yves Chibon |
9c2953 |
if arg_project.count("/") > 1:
|
|
Pierre-Yves Chibon |
25e586 |
raise pagure.exceptions.PagureException(
|
|
Pierre-Yves Chibon |
9c2953 |
'Invalid project name, has more than one "/": %s' % arg_project
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
9c2953 |
namespace, name = arg_project.split("/")
|
|
Pierre-Yves Chibon |
25e586 |
else:
|
|
Pierre-Yves Chibon |
25e586 |
name = arg_project
|
|
Pierre-Yves Chibon |
25e586 |
|
|
Pierre-Yves Chibon |
930073 |
return pagure.lib.query._get_project(
|
|
Pierre-Yves Chibon |
9c2953 |
session, namespace=namespace, name=name, user=user
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
25e586 |
|
|
Pierre-Yves Chibon |
25e586 |
|
|
Your Name |
76327a |
def _check_project(_project, **kwargs):
|
|
Your Name |
76327a |
""" Check that the project extracted with args is a valid project """
|
|
Your Name |
76327a |
if _project is None:
|
|
Your Name |
76327a |
raise pagure.exceptions.PagureException(
|
|
Your Name |
76327a |
"No project found with: {}".format(
|
|
Your Name |
76327a |
", ".join(["{}={}".format(k, v) for k, v in kwargs.items()])
|
|
Your Name |
76327a |
)
|
|
Your Name |
76327a |
)
|
|
Your Name |
76327a |
|
|
Your Name |
76327a |
|
|
Pierre-Yves Chibon |
ede948 |
def do_generate_acl(args):
|
|
Pierre-Yves Chibon |
b22dbf |
""" Regenerate the gitolite ACL file.
|
|
Pierre-Yves Chibon |
b22dbf |
|
|
Pierre-Yves Chibon |
b22dbf |
|
|
Pierre-Yves Chibon |
ede948 |
:arg args: the argparse object returned by ``parse_arguments()``.
|
|
Pierre-Yves Chibon |
b22dbf |
|
|
Pierre-Yves Chibon |
b22dbf |
"""
|
|
Pierre-Yves Chibon |
9c2953 |
_log.debug("group: %s", args.group)
|
|
Pierre-Yves Chibon |
9c2953 |
_log.debug("project: %s", args.project)
|
|
Pierre-Yves Chibon |
9c2953 |
_log.debug("user: %s", args.user)
|
|
Pierre-Yves Chibon |
9c2953 |
_log.debug("all: %s", args.all_)
|
|
Pierre-Yves Chibon |
ede948 |
|
|
Pierre-Yves Chibon |
ede948 |
title = None
|
|
Pierre-Yves Chibon |
ede948 |
project = None
|
|
Pierre-Yves Chibon |
ede948 |
if args.project:
|
|
Pierre-Yves Chibon |
25e586 |
project = _get_project(args.project, user=args.user)
|
|
Pierre-Yves Chibon |
ede948 |
title = project.fullname
|
|
Pierre-Yves Chibon |
ede948 |
if args.all_:
|
|
Pierre-Yves Chibon |
9c2953 |
title = "all"
|
|
Pierre-Yves Chibon |
ede948 |
project = -1
|
|
Pierre-Yves Chibon |
ede948 |
|
|
Patrick Uiterwijk |
92cbf5 |
if not args.all_ and not args.project:
|
|
Patrick Uiterwijk |
92cbf5 |
print(
|
|
Pierre-Yves Chibon |
9c2953 |
"Please note that you have not selected a project or --all. "
|
|
Pierre-Yves Chibon |
9c2953 |
"Do you want to recompile the existing config file?"
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Patrick Uiterwijk |
92cbf5 |
if not _ask_confirmation():
|
|
Patrick Uiterwijk |
92cbf5 |
return
|
|
Patrick Uiterwijk |
92cbf5 |
|
|
Patrick Uiterwijk |
ad0b72 |
helper = pagure.lib.git_auth.get_git_auth_helper()
|
|
Pierre-Yves Chibon |
9c2953 |
_log.debug("Got helper: %s", helper)
|
|
Pierre-Yves Chibon |
ede948 |
|
|
Pierre-Yves Chibon |
ede948 |
group_obj = None
|
|
Pierre-Yves Chibon |
ede948 |
if args.group:
|
|
Pierre-Yves Chibon |
930073 |
group_obj = pagure.lib.query.search_groups(
|
|
Pierre-Yves Chibon |
930073 |
session, group_name=args.group
|
|
Pierre-Yves Chibon |
930073 |
)
|
|
Pierre-Yves Chibon |
ede948 |
_log.debug(
|
|
Pierre-Yves Chibon |
9c2953 |
"Calling helper: %s with arg: project=%s, group=%s",
|
|
Pierre-Yves Chibon |
9c2953 |
helper,
|
|
Pierre-Yves Chibon |
9c2953 |
project,
|
|
Pierre-Yves Chibon |
9c2953 |
group_obj,
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
ede948 |
|
|
Pierre-Yves Chibon |
f4ba43 |
print(
|
|
Pierre-Yves Chibon |
9c2953 |
"Do you want to re-generate the gitolite.conf file for group: %s "
|
|
Pierre-Yves Chibon |
9c2953 |
"and project: %s?" % (group_obj, title)
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
079c2a |
if _ask_confirmation():
|
|
Pierre-Yves Chibon |
ede948 |
helper.generate_acls(project=project, group=group_obj)
|
|
Pierre-Yves Chibon |
1aac43 |
pagure.lib.tasks_utils.gc_clean()
|
|
Pierre-Yves Chibon |
9c2953 |
print("Gitolite ACLs updated")
|
|
Pierre-Yves Chibon |
079c2a |
|
|
Pierre-Yves Chibon |
079c2a |
|
|
Pierre-Yves Chibon |
af5184 |
def do_refresh_ssh(_):
|
|
Pierre-Yves Chibon |
b22dbf |
""" Regenerate the user key files.
|
|
Pierre-Yves Chibon |
b22dbf |
|
|
Pierre-Yves Chibon |
b22dbf |
:arg _: the argparse object returned by ``parse_arguments()``, which is
|
|
Pierre-Yves Chibon |
b22dbf |
ignored as there are no argument to pass to this action.
|
|
Pierre-Yves Chibon |
b22dbf |
|
|
Pierre-Yves Chibon |
b22dbf |
"""
|
|
Pierre-Yves Chibon |
f4ba43 |
print(
|
|
Pierre-Yves Chibon |
9c2953 |
"Do you want to re-generate all the ssh keys for every user in "
|
|
Pierre-Yves Chibon |
9c2953 |
"the database? (Depending on your instance this may take a while "
|
|
Pierre-Yves Chibon |
9c2953 |
"and result in an outage while it lasts)"
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
079c2a |
if _ask_confirmation():
|
|
Pierre-Yves Chibon |
079c2a |
generate_user_key_files()
|
|
Pierre-Yves Chibon |
9c2953 |
print("User key files regenerated")
|
|
Pierre-Yves Chibon |
079c2a |
do_generate_acl()
|
|
Pierre-Yves Chibon |
079c2a |
|
|
Pierre-Yves Chibon |
079c2a |
|
|
Pierre-Yves Chibon |
b22dbf |
def do_generate_hook_token(_):
|
|
Pierre-Yves Chibon |
b22dbf |
""" Regenerate the hook_token for each projects in the DB.
|
|
Pierre-Yves Chibon |
b22dbf |
|
|
Pierre-Yves Chibon |
b22dbf |
:arg _: the argparse object returned by ``parse_arguments()``, which is
|
|
Pierre-Yves Chibon |
b22dbf |
ignored as there are no argument to pass to this action.
|
|
Pierre-Yves Chibon |
b22dbf |
|
|
Pierre-Yves Chibon |
b22dbf |
"""
|
|
Pierre-Yves Chibon |
f4ba43 |
print(
|
|
Pierre-Yves Chibon |
9c2953 |
"Do you want to re-generate all the hook token for every user in "
|
|
Pierre-Yves Chibon |
9c2953 |
"the database? This will break every web-hook set-up on this "
|
|
Pierre-Yves Chibon |
9c2953 |
"instance. You should only ever run this for a security issue"
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
079c2a |
if _ask_confirmation():
|
|
Pierre-Yves Chibon |
930073 |
pagure.lib.query.generate_hook_token(session)
|
|
Pierre-Yves Chibon |
9c2953 |
print("Hook token all re-generated")
|
|
Pierre-Yves Chibon |
079c2a |
|
|
Pierre-Yves Chibon |
079c2a |
|
|
Pierre-Yves Chibon |
af5184 |
def do_list_admin_token(args):
|
|
Pierre-Yves Chibon |
b22dbf |
""" List the admin token.
|
|
Pierre-Yves Chibon |
b22dbf |
|
|
Pierre-Yves Chibon |
b22dbf |
:arg args: the argparse object returned by ``parse_arguments()``.
|
|
Pierre-Yves Chibon |
b22dbf |
|
|
Pierre-Yves Chibon |
b22dbf |
"""
|
|
Pierre-Yves Chibon |
9c2953 |
_log.debug("user: %s", args.user)
|
|
Pierre-Yves Chibon |
9c2953 |
_log.debug("token: %s", args.token)
|
|
Pierre-Yves Chibon |
9c2953 |
_log.debug("active: %s", args.active)
|
|
Pierre-Yves Chibon |
9c2953 |
_log.debug("expire: %s", args.expired)
|
|
Pierre-Yves Chibon |
9c2953 |
_log.debug("all: %s", args.all)
|
|
Pierre-Yves Chibon |
af5184 |
|
|
Pierre-Yves Chibon |
9c2953 |
acls = pagure.config.config["ADMIN_API_ACLS"]
|
|
Pierre-Yves Chibon |
f3c6b4 |
if args.all:
|
|
Pierre-Yves Chibon |
f3c6b4 |
acls = None
|
|
Pierre-Yves Chibon |
930073 |
tokens = pagure.lib.query.search_token(
|
|
Pierre-Yves Chibon |
9c2953 |
session, acls, user=args.user, active=args.active, expired=args.expired
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
9a36a4 |
|
|
Pierre-Yves Chibon |
af5184 |
for token in tokens:
|
|
Pierre-Yves Chibon |
9c2953 |
print("%s -- %s -- %s" % (token.id, token.user.user, token.expiration))
|
|
Pierre-Yves Chibon |
af5184 |
if not tokens:
|
|
Pierre-Yves Chibon |
9c2953 |
print("No admin tokens found")
|
|
Pierre-Yves Chibon |
af5184 |
|
|
Pierre-Yves Chibon |
af5184 |
|
|
Pierre-Yves Chibon |
af5184 |
def do_info_admin_token(args):
|
|
Pierre-Yves Chibon |
b22dbf |
""" Print out information about the specified API token.
|
|
Pierre-Yves Chibon |
b22dbf |
|
|
Pierre-Yves Chibon |
b22dbf |
:arg args: the argparse object returned by ``parse_arguments()``.
|
|
Pierre-Yves Chibon |
b22dbf |
|
|
Pierre-Yves Chibon |
b22dbf |
"""
|
|
Pierre-Yves Chibon |
9c2953 |
_log.debug("token: %s", args.token)
|
|
Pierre-Yves Chibon |
af5184 |
|
|
Pierre-Yves Chibon |
930073 |
token = pagure.lib.query.search_token(session, acls=None, token=args.token)
|
|
Pierre-Yves Chibon |
af5184 |
if not token:
|
|
Pierre-Yves Chibon |
9c2953 |
raise pagure.exceptions.PagureException("No such admin token found")
|
|
Pierre-Yves Chibon |
af5184 |
|
|
Pierre-Yves Chibon |
9c2953 |
print("%s -- %s -- %s" % (token.id, token.user.user, token.expiration))
|
|
Pierre-Yves Chibon |
9c2953 |
print("ACLs:")
|
|
Pierre-Yves Chibon |
af5184 |
for acl in token.acls:
|
|
Pierre-Yves Chibon |
9c2953 |
print(" - %s" % acl.name)
|
|
Pierre-Yves Chibon |
af5184 |
|
|
Pierre-Yves Chibon |
af5184 |
|
|
Pierre-Yves Chibon |
af5184 |
def do_expire_admin_token(args):
|
|
Pierre-Yves Chibon |
b22dbf |
""" Expire a specific admin token.
|
|
Pierre-Yves Chibon |
b22dbf |
|
|
Pierre-Yves Chibon |
b22dbf |
:arg args: the argparse object returned by ``parse_arguments()``.
|
|
Pierre-Yves Chibon |
b22dbf |
|
|
Pierre-Yves Chibon |
b22dbf |
"""
|
|
Pierre-Yves Chibon |
9c2953 |
_log.debug("token: %s", args.token)
|
|
Pierre-Yves Chibon |
af5184 |
|
|
Pierre-Yves Chibon |
9c2953 |
acls = pagure.config.config["ADMIN_API_ACLS"]
|
|
Pierre-Yves Chibon |
930073 |
token = pagure.lib.query.search_token(session, acls, token=args.token)
|
|
Pierre-Yves Chibon |
af5184 |
if not token:
|
|
Pierre-Yves Chibon |
9c2953 |
raise pagure.exceptions.PagureException("No such admin token found")
|
|
Pierre-Yves Chibon |
af5184 |
|
|
Pierre-Yves Chibon |
9c2953 |
print("%s -- %s -- %s" % (token.id, token.user.user, token.expiration))
|
|
Pierre-Yves Chibon |
9c2953 |
print("ACLs:")
|
|
Pierre-Yves Chibon |
af5184 |
for acl in token.acls:
|
|
Pierre-Yves Chibon |
9c2953 |
print(" - %s" % acl.name)
|
|
Pierre-Yves Chibon |
af5184 |
|
|
Pierre-Yves Chibon |
9c2953 |
print("Do you really want to expire this API token?")
|
|
Pierre-Yves Chibon |
af5184 |
if _ask_confirmation():
|
|
Pierre-Yves Chibon |
af5184 |
token.expiration = datetime.datetime.utcnow()
|
|
Pierre-Yves Chibon |
b130e5 |
session.add(token)
|
|
Pierre-Yves Chibon |
b130e5 |
session.commit()
|
|
Pierre-Yves Chibon |
9c2953 |
print("Token expired")
|
|
Pierre-Yves Chibon |
af5184 |
|
|
Pierre-Yves Chibon |
af5184 |
|
|
Pierre-Yves Chibon |
87a6d0 |
def do_update_admin_token(args):
|
|
Pierre-Yves Chibon |
87a6d0 |
""" Update the expiration date of an admin token.
|
|
Pierre-Yves Chibon |
87a6d0 |
|
|
Pierre-Yves Chibon |
87a6d0 |
:arg args: the argparse object returned by ``parse_arguments()``.
|
|
Pierre-Yves Chibon |
87a6d0 |
|
|
Pierre-Yves Chibon |
87a6d0 |
"""
|
|
Pierre-Yves Chibon |
9c2953 |
_log.debug("token: %s", args.token)
|
|
Pierre-Yves Chibon |
9c2953 |
_log.debug("new date: %s", args.date)
|
|
Pierre-Yves Chibon |
87a6d0 |
|
|
Pierre-Yves Chibon |
9c2953 |
acls = pagure.config.config["ADMIN_API_ACLS"]
|
|
Pierre-Yves Chibon |
930073 |
token = pagure.lib.query.search_token(session, acls, token=args.token)
|
|
Pierre-Yves Chibon |
87a6d0 |
if not token:
|
|
Pierre-Yves Chibon |
9c2953 |
raise pagure.exceptions.PagureException("No such admin token found")
|
|
Pierre-Yves Chibon |
87a6d0 |
|
|
Pierre-Yves Chibon |
87a6d0 |
try:
|
|
Pierre-Yves Chibon |
9c2953 |
date = arrow.get(args.date, "YYYY-MM-DD").replace(tzinfo="UTC")
|
|
Pierre-Yves Chibon |
87a6d0 |
except Exception as err:
|
|
Pierre-Yves Chibon |
87a6d0 |
_log.exception(err)
|
|
Pierre-Yves Chibon |
87a6d0 |
raise pagure.exceptions.PagureException(
|
|
Pierre-Yves Chibon |
9c2953 |
"Invalid new expiration date submitted: %s, not of the format "
|
|
Pierre-Yves Chibon |
9c2953 |
"YYYY-MM-DD" % args.date
|
|
Pierre-Yves Chibon |
87a6d0 |
)
|
|
Pierre-Yves Chibon |
87a6d0 |
|
|
Pierre-Yves Chibon |
2a9d22 |
if date.naive.date() <= datetime.datetime.utcnow().date():
|
|
Pierre-Yves Chibon |
2a9d22 |
raise pagure.exceptions.PagureException(
|
|
Pierre-Yves Chibon |
9c2953 |
"You are about to expire this API token using the wrong "
|
|
Pierre-Yves Chibon |
9c2953 |
"command, please use: pagure-admin admin-token expire"
|
|
Pierre-Yves Chibon |
2a9d22 |
)
|
|
Pierre-Yves Chibon |
2a9d22 |
|
|
Pierre-Yves Chibon |
9c2953 |
print("%s -- %s -- %s" % (token.id, token.user.user, token.expiration))
|
|
Pierre-Yves Chibon |
9c2953 |
print("ACLs:")
|
|
Pierre-Yves Chibon |
87a6d0 |
for acl in token.acls:
|
|
Pierre-Yves Chibon |
9c2953 |
print(" - %s" % acl.name)
|
|
Pierre-Yves Chibon |
87a6d0 |
|
|
Pierre-Yves Chibon |
87a6d0 |
print(
|
|
Pierre-Yves Chibon |
9c2953 |
"Do you really want to update this API token to expire on %s?"
|
|
Pierre-Yves Chibon |
9c2953 |
% args.date
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
87a6d0 |
if _ask_confirmation():
|
|
Pierre-Yves Chibon |
87a6d0 |
token.expiration = date.naive
|
|
Pierre-Yves Chibon |
b130e5 |
session.add(token)
|
|
Pierre-Yves Chibon |
b130e5 |
session.commit()
|
|
Pierre-Yves Chibon |
9c2953 |
print("Token updated")
|
|
Pierre-Yves Chibon |
87a6d0 |
|
|
Pierre-Yves Chibon |
87a6d0 |
|
|
Pierre-Yves Chibon |
af5184 |
def do_create_admin_token(args):
|
|
Pierre-Yves Chibon |
b22dbf |
""" Create a new admin token.
|
|
Pierre-Yves Chibon |
b22dbf |
|
|
Pierre-Yves Chibon |
b22dbf |
:arg args: the argparse object returned by ``parse_arguments()``.
|
|
Pierre-Yves Chibon |
b22dbf |
|
|
Pierre-Yves Chibon |
b22dbf |
"""
|
|
Pierre-Yves Chibon |
9c2953 |
_log.debug("user: %s", args.user)
|
|
Pierre-Yves Chibon |
af5184 |
# Validate user first
|
|
Pierre-Yves Chibon |
930073 |
pagure.lib.query.get_user(session, args.user)
|
|
Pierre-Yves Chibon |
af5184 |
|
|
Pierre-Yves Chibon |
9c2953 |
acls_list = pagure.config.config["ADMIN_API_ACLS"]
|
|
Pierre-Yves Chibon |
af5184 |
for idx, acl in enumerate(acls_list):
|
|
Pierre-Yves Chibon |
9c2953 |
print("%s. %s" % (idx, acl))
|
|
Pierre-Yves Chibon |
af5184 |
|
|
Pierre-Yves Chibon |
9c2953 |
print("Which ACLs do you want to associated with this token?")
|
|
Pierre-Yves Chibon |
9c2953 |
acls = _get_input("(Comma separated list): ")
|
|
Pierre-Yves Chibon |
9c2953 |
acls_idx = [int(acl.strip()) for acl in acls.split(",")]
|
|
Pierre-Yves Chibon |
af5184 |
acls = [acls_list[acl] for acl in acls_idx]
|
|
Pierre-Yves Chibon |
af5184 |
|
|
Pierre-Yves Chibon |
9c2953 |
print("ACLs selected:")
|
|
Pierre-Yves Chibon |
af5184 |
for idx, acl in enumerate(acls_idx):
|
|
Pierre-Yves Chibon |
9c2953 |
print("%s. %s" % (acls_idx[idx], acls[idx]))
|
|
Pierre-Yves Chibon |
af5184 |
|
|
Pierre-Yves Chibon |
9c2953 |
print("Do you want to create this API token?")
|
|
Pierre-Yves Chibon |
af5184 |
if _ask_confirmation():
|
|
Pierre-Yves Chibon |
930073 |
print(
|
|
Pierre-Yves Chibon |
930073 |
pagure.lib.query.add_token_to_user(session, None, acls, args.user)
|
|
Pierre-Yves Chibon |
930073 |
)
|
|
Pierre-Yves Chibon |
af5184 |
|
|
Pierre-Yves Chibon |
af5184 |
|
|
Pierre-Yves Chibon |
74b8f8 |
def do_delete_project(args):
|
|
Pierre-Yves Chibon |
74b8f8 |
""" Delete a project.
|
|
Pierre-Yves Chibon |
74b8f8 |
|
|
Pierre-Yves Chibon |
74b8f8 |
:arg args: the argparse object returned by ``parse_arguments()``.
|
|
Pierre-Yves Chibon |
74b8f8 |
|
|
Pierre-Yves Chibon |
74b8f8 |
"""
|
|
Pierre-Yves Chibon |
74b8f8 |
_log.debug("project: %s", args.project)
|
|
Pierre-Yves Chibon |
74b8f8 |
_log.debug("user: %s", args.user)
|
|
Pierre-Yves Chibon |
74b8f8 |
_log.debug("user deleting: %s", args.action_user)
|
|
Pierre-Yves Chibon |
74b8f8 |
|
|
Pierre-Yves Chibon |
74b8f8 |
# Validate users
|
|
Pierre-Yves Chibon |
74b8f8 |
pagure.lib.query.get_user(session, args.user)
|
|
Pierre-Yves Chibon |
74b8f8 |
pagure.lib.query.get_user(session, args.action_user)
|
|
Pierre-Yves Chibon |
74b8f8 |
|
|
Pierre-Yves Chibon |
74b8f8 |
# Get the project
|
|
Pierre-Yves Chibon |
74b8f8 |
project = _get_project(args.project, user=args.user)
|
|
Pierre-Yves Chibon |
74b8f8 |
|
|
Your Name |
76327a |
_check_project(project, project=args.project, user=args.user)
|
|
Pierre-Yves Chibon |
74b8f8 |
|
|
Pierre-Yves Chibon |
74b8f8 |
print(
|
|
Pierre-Yves Chibon |
74b8f8 |
"Are you sure you want to delete: %s?\n This cannot be undone!"
|
|
Pierre-Yves Chibon |
74b8f8 |
% project.fullname
|
|
Pierre-Yves Chibon |
74b8f8 |
)
|
|
Pierre-Yves Chibon |
74b8f8 |
if not _ask_confirmation():
|
|
Pierre-Yves Chibon |
74b8f8 |
return
|
|
Pierre-Yves Chibon |
74b8f8 |
|
|
Pierre-Yves Chibon |
74b8f8 |
pagure.lib.tasks.delete_project(
|
|
Pierre-Yves Chibon |
74b8f8 |
namespace=project.namespace,
|
|
Pierre-Yves Chibon |
74b8f8 |
name=project.name,
|
|
Pierre-Yves Chibon |
74b8f8 |
user=project.user.user if project.is_fork else None,
|
|
Pierre-Yves Chibon |
74b8f8 |
action_user=args.action_user,
|
|
Pierre-Yves Chibon |
74b8f8 |
)
|
|
Pierre-Yves Chibon |
74b8f8 |
session.commit()
|
|
Pierre-Yves Chibon |
74b8f8 |
print("Project deleted")
|
|
Pierre-Yves Chibon |
74b8f8 |
|
|
Pierre-Yves Chibon |
74b8f8 |
|
|
Pierre-Yves Chibon |
25e586 |
def do_get_watch_status(args):
|
|
Pierre-Yves Chibon |
25e586 |
""" Get the watch status of an user on a project.
|
|
Pierre-Yves Chibon |
25e586 |
|
|
Pierre-Yves Chibon |
25e586 |
:arg args: the argparse object returned by ``parse_arguments()``.
|
|
Pierre-Yves Chibon |
25e586 |
|
|
Pierre-Yves Chibon |
25e586 |
"""
|
|
Pierre-Yves Chibon |
9c2953 |
_log.debug("user: %s", args.user)
|
|
Pierre-Yves Chibon |
9c2953 |
_log.debug("project: %s", args.project)
|
|
Pierre-Yves Chibon |
25e586 |
# Validate user
|
|
Pierre-Yves Chibon |
930073 |
pagure.lib.query.get_user(session, args.user)
|
|
Pierre-Yves Chibon |
25e586 |
|
|
Pierre-Yves Chibon |
25e586 |
# Get the project
|
|
Pierre-Yves Chibon |
25e586 |
project = _get_project(args.project)
|
|
Pierre-Yves Chibon |
25e586 |
|
|
Your Name |
76327a |
_check_project(project, project=args.project)
|
|
Pierre-Yves Chibon |
25e586 |
|
|
Pierre-Yves Chibon |
9c2953 |
level = (
|
|
Pierre-Yves Chibon |
930073 |
pagure.lib.query.get_watch_level_on_repo(
|
|
Pierre-Yves Chibon |
9c2953 |
session=session,
|
|
Pierre-Yves Chibon |
9c2953 |
user=args.user,
|
|
Pierre-Yves Chibon |
9c2953 |
repo=project.name,
|
|
Pierre-Yves Chibon |
9c2953 |
repouser=None,
|
|
Pierre-Yves Chibon |
9c2953 |
namespace=project.namespace,
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
9c2953 |
or []
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
25e586 |
|
|
Pierre-Yves Chibon |
25e586 |
# Specify that issues == 'issues & PRs'
|
|
Pierre-Yves Chibon |
9c2953 |
if "issues" in level:
|
|
Pierre-Yves Chibon |
9c2953 |
level.append("pull-requests")
|
|
Pierre-Yves Chibon |
25e586 |
|
|
Pierre-Yves Chibon |
9c2953 |
print(
|
|
Pierre-Yves Chibon |
9c2953 |
"On %s user: %s is watching the following items: %s"
|
|
Pierre-Yves Chibon |
9c2953 |
% (project.fullname, args.user, ", ".join(level) or None)
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
25e586 |
|
|
Pierre-Yves Chibon |
25e586 |
|
|
Pierre-Yves Chibon |
25e586 |
def do_update_watch_status(args):
|
|
Pierre-Yves Chibon |
25e586 |
""" Update the watch status of an user on a project.
|
|
Pierre-Yves Chibon |
25e586 |
|
|
Pierre-Yves Chibon |
25e586 |
:arg args: the argparse object returned by ``parse_arguments()``.
|
|
Pierre-Yves Chibon |
25e586 |
|
|
Pierre-Yves Chibon |
25e586 |
"""
|
|
Pierre-Yves Chibon |
25e586 |
|
|
Pierre-Yves Chibon |
9c2953 |
_log.debug("user: %s", args.user)
|
|
Pierre-Yves Chibon |
9c2953 |
_log.debug("status: %s", args.status)
|
|
Pierre-Yves Chibon |
9c2953 |
_log.debug("project: %s", args.project)
|
|
Pierre-Yves Chibon |
25e586 |
|
|
Pierre-Yves Chibon |
25e586 |
# Validate user
|
|
Pierre-Yves Chibon |
930073 |
pagure.lib.query.get_user(session, args.user)
|
|
Pierre-Yves Chibon |
25e586 |
|
|
Pierre-Yves Chibon |
25e586 |
# Ask the status if none were given
|
|
Pierre-Yves Chibon |
25e586 |
if args.status is None:
|
|
Pierre-Yves Chibon |
9c2953 |
print("The watch status can be one of the following: ")
|
|
Pierre-Yves Chibon |
25e586 |
for lvl in WATCH:
|
|
Pierre-Yves Chibon |
9c2953 |
print("%s: %s" % (lvl, WATCH[lvl]))
|
|
Pierre-Yves Chibon |
9c2953 |
args.status = _get_input("Status:")
|
|
Pierre-Yves Chibon |
25e586 |
|
|
Pierre-Yves Chibon |
25e586 |
# Validate the status
|
|
Pierre-Yves Chibon |
25e586 |
if args.status not in WATCH:
|
|
Pierre-Yves Chibon |
25e586 |
raise pagure.exceptions.PagureException(
|
|
Pierre-Yves Chibon |
9c2953 |
"Invalid status provided: %s not in %s"
|
|
Pierre-Yves Chibon |
9c2953 |
% (args.status, ", ".join(sorted(WATCH.keys())))
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
25e586 |
|
|
Pierre-Yves Chibon |
25e586 |
# Get the project
|
|
Pierre-Yves Chibon |
25e586 |
project = _get_project(args.project)
|
|
Pierre-Yves Chibon |
25e586 |
|
|
Your Name |
76327a |
_check_project(project, project=args.project)
|
|
Pierre-Yves Chibon |
25e586 |
|
|
Pierre-Yves Chibon |
9c2953 |
print(
|
|
Pierre-Yves Chibon |
9c2953 |
"Updating watch status of %s to %s (%s) on %s"
|
|
Pierre-Yves Chibon |
9c2953 |
% (args.user, args.status, WATCH[args.status], args.project)
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
25e586 |
|
|
Pierre-Yves Chibon |
930073 |
pagure.lib.query.update_watch_status(
|
|
Pierre-Yves Chibon |
9c2953 |
session=session, project=project, user=args.user, watch=args.status
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
b130e5 |
session.commit()
|
|
Pierre-Yves Chibon |
25e586 |
|
|
Pierre-Yves Chibon |
25e586 |
|
|
Pierre-Yves Chibon |
3a016c |
def do_read_only(args):
|
|
Pierre-Yves Chibon |
3a016c |
""" Set or update the read-only status of a project.
|
|
Pierre-Yves Chibon |
3a016c |
|
|
Pierre-Yves Chibon |
3a016c |
:arg args: the argparse object returned by ``parse_arguments()``.
|
|
Pierre-Yves Chibon |
3a016c |
|
|
Pierre-Yves Chibon |
3a016c |
"""
|
|
Pierre-Yves Chibon |
3a016c |
|
|
Pierre-Yves Chibon |
9c2953 |
_log.debug("project: %s", args.project)
|
|
Pierre-Yves Chibon |
9c2953 |
_log.debug("user: %s", args.user)
|
|
Pierre-Yves Chibon |
9c2953 |
_log.debug("read-only: %s", args.ro)
|
|
Pierre-Yves Chibon |
3a016c |
|
|
Pierre-Yves Chibon |
3a016c |
# Validate user
|
|
Pierre-Yves Chibon |
930073 |
pagure.lib.query.get_user(session, args.user)
|
|
Pierre-Yves Chibon |
3a016c |
|
|
Pierre-Yves Chibon |
3a016c |
# Get the project
|
|
Pierre-Yves Chibon |
99cda8 |
project = _get_project(args.project, user=args.user)
|
|
Pierre-Yves Chibon |
3a016c |
|
|
Your Name |
76327a |
_check_project(project, project=args.project)
|
|
Pierre-Yves Chibon |
3a016c |
|
|
Pierre-Yves Chibon |
3a016c |
# Validate ro flag
|
|
Pierre-Yves Chibon |
9c2953 |
if args.ro and args.ro.lower() not in ["true", "false"]:
|
|
Pierre-Yves Chibon |
3a016c |
raise pagure.exceptions.PagureException(
|
|
Pierre-Yves Chibon |
9c2953 |
"Invalid read-only status specified: %s is not in: "
|
|
Pierre-Yves Chibon |
9c2953 |
"true, false" % args.ro.lower()
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
3a016c |
|
|
Pierre-Yves Chibon |
3a016c |
if not args.ro:
|
|
Pierre-Yves Chibon |
3a016c |
print(
|
|
Pierre-Yves Chibon |
9c2953 |
"The current read-only flag of the project %s is set to %s"
|
|
Pierre-Yves Chibon |
9c2953 |
% (project.fullname, project.read_only)
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
3a016c |
else:
|
|
Pierre-Yves Chibon |
930073 |
pagure.lib.query.update_read_only_mode(
|
|
Pierre-Yves Chibon |
9c2953 |
session, project, read_only=(args.ro.lower() == "true")
|
|
Pierre-Yves Chibon |
3a016c |
)
|
|
Pierre-Yves Chibon |
b130e5 |
session.commit()
|
|
Pierre-Yves Chibon |
3a016c |
print(
|
|
Pierre-Yves Chibon |
9c2953 |
"The read-only flag of the project %s has been set to %s"
|
|
Pierre-Yves Chibon |
9c2953 |
% (project.fullname, args.ro.lower() == "true")
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
3a016c |
|
|
Pierre-Yves Chibon |
3a016c |
|
|
Pierre-Yves Chibon |
ffbe63 |
def do_new_group(args):
|
|
Pierre-Yves Chibon |
ffbe63 |
""" Create a new group in this pagure instance.
|
|
Pierre-Yves Chibon |
ffbe63 |
|
|
Pierre-Yves Chibon |
ffbe63 |
:arg args: the argparse object returned by ``parse_arguments()``.
|
|
Pierre-Yves Chibon |
ffbe63 |
|
|
Pierre-Yves Chibon |
ffbe63 |
"""
|
|
Pierre-Yves Chibon |
ffbe63 |
|
|
Pierre-Yves Chibon |
9c2953 |
_log.debug("name: %s", args.group_name)
|
|
Pierre-Yves Chibon |
9c2953 |
_log.debug("display-name: %s", args.display)
|
|
Pierre-Yves Chibon |
9c2953 |
_log.debug("description: %s", args.description)
|
|
Pierre-Yves Chibon |
9c2953 |
_log.debug("username: %s", args.username)
|
|
Pierre-Yves Chibon |
ffbe63 |
|
|
Pierre-Yves Chibon |
ffbe63 |
# Validate user
|
|
Pierre-Yves Chibon |
930073 |
pagure.lib.query.get_user(session, args.username)
|
|
Pierre-Yves Chibon |
ffbe63 |
|
|
Pierre-Yves Chibon |
ffbe63 |
if not args.username:
|
|
Pierre-Yves Chibon |
ffbe63 |
raise pagure.exceptions.PagureException(
|
|
Pierre-Yves Chibon |
9c2953 |
"An username must be provided to associate with the group"
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
ffbe63 |
|
|
Pierre-Yves Chibon |
ffbe63 |
if not args.display:
|
|
Pierre-Yves Chibon |
ffbe63 |
raise pagure.exceptions.PagureException(
|
|
Pierre-Yves Chibon |
9c2953 |
"A display name must be provided for the group"
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
ffbe63 |
|
|
Pierre-Yves Chibon |
9c2953 |
if pagure.config.config.get("ENABLE_GROUP_MNGT") is False:
|
|
Pierre-Yves Chibon |
9c2953 |
print("Group management has been turned off for this pagure instance")
|
|
Pierre-Yves Chibon |
ffbe63 |
if not _ask_confirmation():
|
|
Pierre-Yves Chibon |
ffbe63 |
return
|
|
Pierre-Yves Chibon |
ffbe63 |
|
|
Pierre-Yves Chibon |
930073 |
msg = pagure.lib.query.add_group(
|
|
Pierre-Yves Chibon |
ffbe63 |
session=session,
|
|
Pierre-Yves Chibon |
ffbe63 |
group_name=args.group_name,
|
|
Pierre-Yves Chibon |
ffbe63 |
display_name=args.display,
|
|
Pierre-Yves Chibon |
ffbe63 |
description=args.description,
|
|
Pierre-Yves Chibon |
9c2953 |
group_type="user",
|
|
Pierre-Yves Chibon |
ffbe63 |
user=args.username,
|
|
Pierre-Yves Chibon |
ffbe63 |
is_admin=True,
|
|
Pierre-Yves Chibon |
9c2953 |
blacklist=pagure.config.config["BLACKLISTED_GROUPS"],
|
|
Pierre-Yves Chibon |
ffbe63 |
)
|
|
Pierre-Yves Chibon |
ffbe63 |
session.commit()
|
|
Pierre-Yves Chibon |
9c2953 |
print("Group `%s` created." % args.group_name)
|
|
Pierre-Yves Chibon |
ffbe63 |
print(msg)
|
|
Pierre-Yves Chibon |
ffbe63 |
|
|
Pierre-Yves Chibon |
ffbe63 |
|
|
Fabian Arrotin |
0096c9 |
def do_list_groups(args):
|
|
Fabian Arrotin |
0096c9 |
""" Lists existing groups in this pagure instance.
|
|
Fabian Arrotin |
0096c9 |
|
|
Fabian Arrotin |
0096c9 |
:arg args: the argparse object returned by ``parse_arguments()``.
|
|
Fabian Arrotin |
0096c9 |
|
|
Fabian Arrotin |
0096c9 |
"""
|
|
Fabian Arrotin |
0096c9 |
|
|
Pierre-Yves Chibon |
930073 |
msg = pagure.lib.query.search_groups(session=session)
|
|
Fabian Arrotin |
0096c9 |
if msg:
|
|
Fabian Arrotin |
0096c9 |
print("List of groups on this Pagure instance:")
|
|
Fabian Arrotin |
0096c9 |
for group in msg:
|
|
Fabian Arrotin |
0096c9 |
print(group)
|
|
Fabian Arrotin |
0096c9 |
else:
|
|
Fabian Arrotin |
0096c9 |
print("No groups found in this pagure instance.")
|
|
Fabian Arrotin |
0096c9 |
|
|
Fabian Arrotin |
0096c9 |
|
|
Pierre-Yves Chibon |
6e0576 |
def do_list_blocked_users(args):
|
|
Pierre-Yves Chibon |
6e0576 |
""" List all the blocked users.
|
|
Pierre-Yves Chibon |
6e0576 |
|
|
Pierre-Yves Chibon |
6e0576 |
:arg args: the argparse object returned by ``parse_arguments()``.
|
|
Pierre-Yves Chibon |
6e0576 |
|
|
Pierre-Yves Chibon |
6e0576 |
"""
|
|
Pierre-Yves Chibon |
6e0576 |
date = None
|
|
Pierre-Yves Chibon |
6e0576 |
if args.date:
|
|
Pierre-Yves Chibon |
6e0576 |
try:
|
|
Pierre-Yves Chibon |
6e0576 |
date = arrow.get(args.date, "YYYY-MM-DD").replace(tzinfo="UTC")
|
|
Pierre-Yves Chibon |
6e0576 |
date = date.datetime
|
|
Pierre-Yves Chibon |
6e0576 |
except Exception as err:
|
|
Pierre-Yves Chibon |
6e0576 |
_log.exception(err)
|
|
Pierre-Yves Chibon |
6e0576 |
raise pagure.exceptions.PagureException(
|
|
Pierre-Yves Chibon |
6e0576 |
"Invalid date submitted: %s, not of the format "
|
|
Pierre-Yves Chibon |
6e0576 |
"YYYY-MM-DD" % args.date
|
|
Pierre-Yves Chibon |
6e0576 |
)
|
|
Pierre-Yves Chibon |
6e0576 |
|
|
Pierre-Yves Chibon |
6e0576 |
blocked_users = pagure.lib.query.get_blocked_users(
|
|
Pierre-Yves Chibon |
6e0576 |
session, username=args.username or None, date=date
|
|
Pierre-Yves Chibon |
6e0576 |
)
|
|
Pierre-Yves Chibon |
6e0576 |
if blocked_users:
|
|
Pierre-Yves Chibon |
6e0576 |
print("Users blocked:")
|
|
Pierre-Yves Chibon |
6e0576 |
for user in blocked_users:
|
|
Pierre-Yves Chibon |
6e0576 |
print(
|
|
Pierre-Yves Chibon |
6e0576 |
" %s - %s"
|
|
Pierre-Yves Chibon |
6e0576 |
% (
|
|
Pierre-Yves Chibon |
6e0576 |
user.user.ljust(20),
|
|
Pierre-Yves Chibon |
6e0576 |
user.refuse_sessions_before.isoformat(),
|
|
Pierre-Yves Chibon |
6e0576 |
)
|
|
Pierre-Yves Chibon |
6e0576 |
)
|
|
Pierre-Yves Chibon |
6e0576 |
else:
|
|
Pierre-Yves Chibon |
6e0576 |
print("No users are currently blocked")
|
|
Pierre-Yves Chibon |
6e0576 |
|
|
Pierre-Yves Chibon |
6e0576 |
|
|
Pierre-Yves Chibon |
bee78a |
def do_block_user(args):
|
|
Pierre-Yves Chibon |
bee78a |
""" Block the specified user from all interactions with pagure until the
|
|
Pierre-Yves Chibon |
bee78a |
specified date.
|
|
Pierre-Yves Chibon |
bee78a |
|
|
Pierre-Yves Chibon |
bee78a |
:arg args: the argparse object returned by ``parse_arguments()``.
|
|
Pierre-Yves Chibon |
bee78a |
|
|
Pierre-Yves Chibon |
bee78a |
"""
|
|
Pierre-Yves Chibon |
bee78a |
|
|
Pierre-Yves Chibon |
9c2953 |
_log.debug("username: %s", args.username)
|
|
Pierre-Yves Chibon |
9c2953 |
_log.debug("date: %s", args.date)
|
|
Pierre-Yves Chibon |
6e0576 |
_log.debug("list: %s", args.list)
|
|
Pierre-Yves Chibon |
6e0576 |
|
|
Pierre-Yves Chibon |
6e0576 |
if args.list:
|
|
Pierre-Yves Chibon |
6e0576 |
return do_list_blocked_users(args)
|
|
Pierre-Yves Chibon |
bee78a |
|
|
Pierre-Yves Chibon |
bee78a |
if not args.username:
|
|
Pierre-Yves Chibon |
bee78a |
raise pagure.exceptions.PagureException(
|
|
Pierre-Yves Chibon |
9c2953 |
"An username must be specified"
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
bee78a |
|
|
Pierre-Yves Chibon |
bee78a |
try:
|
|
Pierre-Yves Chibon |
9c2953 |
date = arrow.get(args.date, "YYYY-MM-DD").replace(tzinfo="UTC")
|
|
Pierre-Yves Chibon |
bee78a |
except Exception as err:
|
|
Pierre-Yves Chibon |
bee78a |
_log.exception(err)
|
|
Pierre-Yves Chibon |
bee78a |
raise pagure.exceptions.PagureException(
|
|
Pierre-Yves Chibon |
9c2953 |
"Invalid date submitted: %s, not of the format "
|
|
Pierre-Yves Chibon |
9c2953 |
"YYYY-MM-DD" % args.date
|
|
Pierre-Yves Chibon |
bee78a |
)
|
|
Pierre-Yves Chibon |
bee78a |
|
|
Pierre-Yves Chibon |
bee78a |
# Validate user
|
|
Pierre-Yves Chibon |
930073 |
user = pagure.lib.query.get_user(session, args.username)
|
|
Pierre-Yves Chibon |
bee78a |
|
|
Pierre-Yves Chibon |
9c2953 |
print(
|
|
Pierre-Yves Chibon |
9c2953 |
"The user `%s` will be blocked from all interaction with this "
|
|
Pierre-Yves Chibon |
6e0576 |
"pagure instance until: %s." % (user.username, date.isoformat())
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
bee78a |
if not _ask_confirmation():
|
|
Pierre-Yves Chibon |
bee78a |
return
|
|
Pierre-Yves Chibon |
bee78a |
|
|
Pierre-Yves Chibon |
dd63e4 |
user.refuse_sessions_before = date.datetime
|
|
Pierre-Yves Chibon |
bee78a |
session.add(user)
|
|
Pierre-Yves Chibon |
bee78a |
session.commit()
|
|
Pierre-Yves Chibon |
bee78a |
|
|
Pierre-Yves Chibon |
bee78a |
|
|
Patrick Uiterwijk |
d29158 |
def do_upload_repospanner_hooks(args):
|
|
Patrick Uiterwijk |
d29158 |
""" Upload hooks to repoSpanner
|
|
Patrick Uiterwijk |
d29158 |
|
|
Patrick Uiterwijk |
d29158 |
Args:
|
|
Patrick Uiterwijk |
d29158 |
args (argparse.Namespace): Parsed arguments
|
|
Patrick Uiterwijk |
d29158 |
"""
|
|
Patrick Uiterwijk |
d29158 |
regioninfo = pagure.config.config["REPOSPANNER_REGIONS"].get(args.region)
|
|
Patrick Uiterwijk |
d29158 |
if not regioninfo:
|
|
Patrick Uiterwijk |
d29158 |
raise ValueError(
|
|
Patrick Uiterwijk |
d29158 |
"repoSpanner region %s not in config file" % args.region
|
|
Patrick Uiterwijk |
d29158 |
)
|
|
Patrick Uiterwijk |
d29158 |
|
|
Patrick Uiterwijk |
d29158 |
env = {
|
|
Patrick Uiterwijk |
d29158 |
"config": os.environ.get("PAGURE_CONFIG", "/etc/pagure/pagure.cfg"),
|
|
Patrick Uiterwijk |
d29158 |
"pypath": os.environ.get("PYTHONPATH", "None"),
|
|
Patrick Uiterwijk |
d29158 |
}
|
|
Patrick Uiterwijk |
d29158 |
sourcefile = os.path.abspath(
|
|
Patrick Uiterwijk |
d29158 |
os.path.join(
|
|
Patrick Uiterwijk |
d29158 |
os.path.dirname(os.path.realpath(__file__)),
|
|
Patrick Uiterwijk |
d29158 |
"../hooks/files/repospannerhook",
|
|
Patrick Uiterwijk |
d29158 |
)
|
|
Patrick Uiterwijk |
d29158 |
)
|
|
Patrick Uiterwijk |
d29158 |
with open(sourcefile, "r") as source:
|
|
Patrick Uiterwijk |
d29158 |
template = source.read()
|
|
Patrick Uiterwijk |
d29158 |
hookcontents = Template(template).substitute(env)
|
|
Patrick Uiterwijk |
d29158 |
|
|
Patrick Uiterwijk |
d29158 |
resp = requests.post(
|
|
Patrick Uiterwijk |
d29158 |
"%s/admin/hook/admin.git/upload" % regioninfo["url"],
|
|
Patrick Uiterwijk |
d29158 |
data=hookcontents,
|
|
Patrick Uiterwijk |
d29158 |
headers={"X-Object-Size": str(len(hookcontents))},
|
|
Patrick Uiterwijk |
d29158 |
verify=regioninfo["ca"],
|
|
Patrick Uiterwijk |
d29158 |
cert=(
|
|
Patrick Uiterwijk |
d29158 |
regioninfo["admin_cert"]["cert"],
|
|
Patrick Uiterwijk |
d29158 |
regioninfo["admin_cert"]["key"],
|
|
Patrick Uiterwijk |
d29158 |
),
|
|
Patrick Uiterwijk |
d29158 |
)
|
|
Patrick Uiterwijk |
d29158 |
resp.raise_for_status()
|
|
Patrick Uiterwijk |
d29158 |
resp = resp.json()
|
|
Patrick Uiterwijk |
d29158 |
_log.debug("Response json: %s", resp)
|
|
Patrick Uiterwijk |
d29158 |
if not resp["Success"]:
|
|
Patrick Uiterwijk |
d29158 |
raise Exception("Error in repoSpanner API call: %s" % resp["Error"])
|
|
Patrick Uiterwijk |
d29158 |
hook = resp["Info"]
|
|
Patrick Uiterwijk |
b3beee |
print("Hook ID for region %s: %s" % (args.region, hook))
|
|
Patrick Uiterwijk |
d29158 |
return hook
|
|
Patrick Uiterwijk |
d29158 |
|
|
Patrick Uiterwijk |
d29158 |
|
|
Patrick Uiterwijk |
d29158 |
def do_ensure_project_hooks(args):
|
|
Patrick Uiterwijk |
d29158 |
""" Ensures that all projects have their hooks setup
|
|
Patrick Uiterwijk |
d29158 |
|
|
Patrick Uiterwijk |
d29158 |
Args:
|
|
Patrick Uiterwijk |
d29158 |
args (argparse.Namespace): Parsed arguments
|
|
Patrick Uiterwijk |
d29158 |
"""
|
|
Patrick Uiterwijk |
d29158 |
projects = []
|
|
Patrick Uiterwijk |
d29158 |
query = session.query(pagure.lib.model.Project).order_by(
|
|
Patrick Uiterwijk |
d29158 |
pagure.lib.model.Project.id
|
|
Patrick Uiterwijk |
d29158 |
)
|
|
Patrick Uiterwijk |
d29158 |
for project in query.all():
|
|
Patrick Uiterwijk |
d29158 |
print("Ensuring hooks for %s" % project.fullname)
|
|
Patrick Uiterwijk |
d29158 |
projects.append(project.fullname)
|
|
Patrick Uiterwijk |
d29158 |
pagure.lib.git.set_up_project_hooks(
|
|
Patrick Uiterwijk |
d29158 |
project, project.repospanner_region, hook=args.hook
|
|
Patrick Uiterwijk |
d29158 |
)
|
|
Patrick Uiterwijk |
d29158 |
return projects
|
|
Patrick Uiterwijk |
d29158 |
|
|
Patrick Uiterwijk |
d29158 |
|
|
Pierre-Yves Chibon |
a10996 |
def do_create_branch(args):
|
|
Pierre-Yves Chibon |
a10996 |
""" Creates the specified git branch
|
|
Pierre-Yves Chibon |
a10996 |
|
|
Pierre-Yves Chibon |
a10996 |
Args:
|
|
Pierre-Yves Chibon |
a10996 |
args (argparse.Namespace): Parsed arguments
|
|
Pierre-Yves Chibon |
a10996 |
"""
|
|
Pierre-Yves Chibon |
a10996 |
_log.debug("project: %s", args.project)
|
|
Pierre-Yves Chibon |
a10996 |
_log.debug("user: %s", args.user)
|
|
Pierre-Yves Chibon |
a10996 |
_log.debug("new branch: %s", args.new_branch)
|
|
Pierre-Yves Chibon |
a10996 |
_log.debug("from branch: %s", args.from_branch)
|
|
Pierre-Yves Chibon |
a10996 |
_log.debug("from commit: %s", args.from_commit)
|
|
Pierre-Yves Chibon |
a10996 |
_log.debug("user creating: %s", args.action_user)
|
|
Pierre-Yves Chibon |
a10996 |
|
|
Pierre-Yves Chibon |
a10996 |
if not args.from_branch and not args.from_commit:
|
|
Pierre-Yves Chibon |
a10996 |
raise pagure.exceptions.PagureException(
|
|
Pierre-Yves Chibon |
a10996 |
"You must create the branch from something, either a commit "
|
|
Pierre-Yves Chibon |
a10996 |
"or another branch"
|
|
Pierre-Yves Chibon |
a10996 |
)
|
|
Pierre-Yves Chibon |
a10996 |
if args.from_branch and args.from_commit:
|
|
Pierre-Yves Chibon |
a10996 |
raise pagure.exceptions.PagureException(
|
|
Pierre-Yves Chibon |
a10996 |
"You must create the branch from something, either a commit "
|
|
Pierre-Yves Chibon |
a10996 |
"or another branch, not from both"
|
|
Pierre-Yves Chibon |
a10996 |
)
|
|
Pierre-Yves Chibon |
a10996 |
|
|
Pierre-Yves Chibon |
a10996 |
# Validate users
|
|
Pierre-Yves Chibon |
a10996 |
pagure.lib.query.get_user(session, args.action_user)
|
|
Pierre-Yves Chibon |
a10996 |
|
|
Pierre-Yves Chibon |
a10996 |
# Get the project
|
|
Pierre-Yves Chibon |
a10996 |
project = _get_project(args.project, user=args.user)
|
|
Pierre-Yves Chibon |
a10996 |
|
|
Your Name |
76327a |
_check_project(project, project=args.project, user=args.user)
|
|
Pierre-Yves Chibon |
a10996 |
|
|
Pierre-Yves Chibon |
a10996 |
try:
|
|
Pierre-Yves Chibon |
a10996 |
pagure.lib.git.new_git_branch(
|
|
Pierre-Yves Chibon |
a10996 |
args.action_user,
|
|
Pierre-Yves Chibon |
a10996 |
project,
|
|
Pierre-Yves Chibon |
a10996 |
args.new_branch,
|
|
Pierre-Yves Chibon |
a10996 |
from_branch=args.from_branch,
|
|
Pierre-Yves Chibon |
a10996 |
from_commit=args.from_commit,
|
|
Pierre-Yves Chibon |
a10996 |
)
|
|
Pierre-Yves Chibon |
a10996 |
except ValueError:
|
|
Pierre-Yves Chibon |
a10996 |
if args.from_commit:
|
|
Pierre-Yves Chibon |
a10996 |
raise pagure.exceptions.PagureException(
|
|
Pierre-Yves Chibon |
a10996 |
"No commit %s found from which to branch" % (args.from_commit)
|
|
Pierre-Yves Chibon |
a10996 |
)
|
|
Pierre-Yves Chibon |
a10996 |
else: # pragma: no-cover
|
|
Pierre-Yves Chibon |
a10996 |
raise
|
|
Pierre-Yves Chibon |
a10996 |
|
|
Pierre-Yves Chibon |
a10996 |
print("Branch created")
|
|
Pierre-Yves Chibon |
a10996 |
|
|
Pierre-Yves Chibon |
a10996 |
|
|
Julen Landa Alustiza |
803bbd |
def do_set_default_branch(args):
|
|
Julen Landa Alustiza |
803bbd |
""" Sets the specified git branch as default
|
|
Julen Landa Alustiza |
803bbd |
|
|
Julen Landa Alustiza |
803bbd |
Args:
|
|
Julen Landa Alustiza |
803bbd |
args (argparse.Namespace): Parsed arguments
|
|
Julen Landa Alustiza |
803bbd |
"""
|
|
Julen Landa Alustiza |
803bbd |
_log.debug("project: %s", args.project)
|
|
Julen Landa Alustiza |
803bbd |
_log.debug("user: %s", args.user)
|
|
Julen Landa Alustiza |
803bbd |
_log.debug("branch: %s", args.branch)
|
|
Julen Landa Alustiza |
803bbd |
|
|
Julen Landa Alustiza |
803bbd |
# Get the project
|
|
Julen Landa Alustiza |
803bbd |
project = _get_project(args.project, user=args.user)
|
|
Julen Landa Alustiza |
803bbd |
|
|
Your Name |
76327a |
_check_project(project, project=args.project, user=args.user)
|
|
Julen Landa Alustiza |
803bbd |
|
|
Julen Landa Alustiza |
803bbd |
repo_path = get_repo_path(project)
|
|
Julen Landa Alustiza |
803bbd |
repo_obj = pygit2.Repository(repo_path)
|
|
Julen Landa Alustiza |
803bbd |
|
|
Julen Landa Alustiza |
803bbd |
if args.branch not in repo_obj.listall_branches():
|
|
Julen Landa Alustiza |
803bbd |
raise pagure.exceptions.PagureException(
|
|
Julen Landa Alustiza |
803bbd |
"No %s branch found on project: %s" % (args.branch, args.project)
|
|
Julen Landa Alustiza |
803bbd |
)
|
|
Julen Landa Alustiza |
803bbd |
|
|
Julen Landa Alustiza |
803bbd |
pagure.lib.git.git_set_ref_head(project, args.branch)
|
|
Julen Landa Alustiza |
803bbd |
|
|
Julen Landa Alustiza |
803bbd |
print("Branch %s set as default" % (args.branch))
|
|
Julen Landa Alustiza |
803bbd |
|
|
Julen Landa Alustiza |
803bbd |
|
|
Pierre-Yves Chibon |
079c2a |
def main():
|
|
Pierre-Yves Chibon |
079c2a |
""" Start of the application. """
|
|
Pierre-Yves Chibon |
079c2a |
|
|
Pierre-Yves Chibon |
079c2a |
# Parse the arguments
|
|
Pierre-Yves Chibon |
079c2a |
args = parse_arguments()
|
|
Pierre-Yves Chibon |
079c2a |
|
|
Pierre-Yves Chibon |
b130e5 |
if args.config:
|
|
Pierre-Yves Chibon |
b130e5 |
config = args.config
|
|
Pierre-Yves Chibon |
9c2953 |
if not config.startswith("/"):
|
|
Pierre-Yves Chibon |
b130e5 |
config = os.path.join(os.getcwd(), config)
|
|
Pierre-Yves Chibon |
9c2953 |
os.environ["PAGURE_CONFIG"] = config
|
|
Pierre-Yves Chibon |
b130e5 |
|
|
Pierre-Yves Chibon |
b130e5 |
global session, _config
|
|
Pierre-Yves Chibon |
b130e5 |
_config = pagure.config.reload_config()
|
|
Pierre-Yves Chibon |
cf98be |
session = pagure.lib.model_base.create_session(_config["DB_URL"])
|
|
Pierre-Yves Chibon |
b130e5 |
|
|
Pierre-Yves Chibon |
079c2a |
logging.basicConfig()
|
|
Pierre-Yves Chibon |
079c2a |
if args.debug:
|
|
Pierre-Yves Chibon |
079c2a |
_log.setLevel(logging.DEBUG)
|
|
Pierre-Yves Chibon |
079c2a |
|
|
Pierre-Yves Chibon |
079c2a |
# Act based on the arguments given
|
|
Pierre-Yves Chibon |
079c2a |
return_code = 0
|
|
Pierre-Yves Chibon |
079c2a |
try:
|
|
Pierre-Yves Chibon |
af5184 |
args.func(args)
|
|
Pierre-Yves Chibon |
079c2a |
except KeyboardInterrupt:
|
|
Pierre-Yves Chibon |
079c2a |
print("\nInterrupted by user.")
|
|
Pierre-Yves Chibon |
079c2a |
return_code = 1
|
|
Pierre-Yves Chibon |
079c2a |
except pagure.exceptions.PagureException as err:
|
|
Pierre-Yves Chibon |
079c2a |
print(err)
|
|
Pierre-Yves Chibon |
079c2a |
return_code = 3
|
|
Pierre-Yves Chibon |
079c2a |
except Exception as err:
|
|
Pierre-Yves Chibon |
9c2953 |
print("Error: {0}".format(err))
|
|
Pierre-Yves Chibon |
079c2a |
logging.exception("Generic error catched:")
|
|
Pierre-Yves Chibon |
079c2a |
return_code = 2
|
|
Pierre-Yves Chibon |
b130e5 |
finally:
|
|
Pierre-Yves Chibon |
b130e5 |
session.remove()
|
|
Pierre-Yves Chibon |
079c2a |
|
|
Pierre-Yves Chibon |
079c2a |
return return_code
|
|
Pierre-Yves Chibon |
079c2a |
|
|
Pierre-Yves Chibon |
079c2a |
|
|
Pierre-Yves Chibon |
9c2953 |
if __name__ == "__main__":
|
|
Pierre-Yves Chibon |
079c2a |
sys.exit(main())
|