def do_set_default_branch(args): """ Sets the specified git branch as default Args: args (argparse.Namespace): Parsed arguments """ _log.debug("project: %s", args.project) _log.debug("user: %s", args.user) _log.debug("branch: %s", args.branch) # Get the project project = _get_project(args.project, user=args.user) _check_project(project, project=args.project, user=args.user) repo_path = get_repo_path(project) repo_obj = pygit2.Repository(repo_path) if args.branch not in repo_obj.listall_branches(): raise pagure.exceptions.PagureException( "No %s branch found on project: %s" % (args.branch, args.project) ) pagure.lib.git.git_set_ref_head(project, args.branch) print("Branch %s set as default" % (args.branch))
def set_up(cls, project): ''' Install the generic post-receive hook that allow us to call multiple post-receive hooks as set per plugin. ''' repopaths = [get_repo_path(project)] for folder in [ pagure_config.get('DOCS_FOLDER'), pagure_config.get('REQUESTS_FOLDER') ]: if folder: repopaths.append(os.path.join(folder, project.path)) hook_files = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'files') for repopath in repopaths: # Make sure the hooks folder exists hookfolder = os.path.join(repopath, 'hooks') if not os.path.exists(hookfolder): os.makedirs(hookfolder) # Install the main post-receive file postreceive = os.path.join(hookfolder, cls.hook_type) if not os.path.exists(postreceive): os.symlink(os.path.join(hook_files, cls.hook_type), postreceive)
def remove(cls, project): ''' Method called to remove the hook of a project. :arg project: a ``pagure.model.Project`` object to which the hook should be installed ''' repopaths = [get_repo_path(project)] # noqa
def install(cls, project, dbobj): ''' Method called to install the hook for a project. :arg project: a ``pagure.model.Project`` object to which the hook should be installed ''' repopaths = [get_repo_path(project)] repo_obj = pygit2.Repository(repopaths[0]) # noqa
def install(cls, project, dbobj): ''' Method called to install the hook for a project. :arg project: a ``pagure.model.Project`` object to which the hook should be installed ''' repopaths = [get_repo_path(project)] cls.base_install(repopaths, dbobj, 'rtd', 'rtd_hook.py')
def remove(cls, project): ''' Method called to remove the hook of a project. :arg project: a ``pagure.model.Project`` object to which the hook should be installed ''' repopaths = [get_repo_path(project)] cls.base_remove(repopaths, 'pagureunsignedcommit')
def install(cls, project, dbobj): ''' Method called to install the hook for a project. :arg project: a ``pagure.model.Project`` object to which the hook should be installed ''' # Init the git repo in case repopaths = [get_repo_path(project)] pygit2.Repository(repopaths[0]) cls.base_install(repopaths, dbobj, 'pagureforcecommit', 'pagure_force_commit_hook.py')
def remove(cls, project): """ Method called to remove the hook of a project. :arg project: a ``pagure.model.Project`` object to which the hook should be installed """ pagure.lib.tasks_mirror.teardown_mirroring.delay( username=project.user.user if project.is_fork else None, namespace=project.namespace, name=project.name, ) repopaths = [get_repo_path(project)] cls.base_remove(repopaths, "mirror")
def install(cls, project, dbobj): """ Method called to install the hook for a project. :arg project: a ``pagure.model.Project`` object to which the hook should be installed """ pagure.lib.tasks_mirror.setup_mirroring.delay( username=project.user.user if project.is_fork else None, namespace=project.namespace, name=project.name, ) repopaths = [get_repo_path(project)] cls.base_install(repopaths, dbobj, "mirror", "mirror.py")
def remove(cls, project): ''' Method called to remove the hook of a project. :arg project: a ``pagure.model.Project`` object to which the hook should be installed ''' repopaths = [get_repo_path(project)] for folder in [ pagure_config.get('DOCS_FOLDER'), pagure_config.get('REQUESTS_FOLDER') ]: if folder: repopaths.append(os.path.join(folder, project.path)) cls.base_remove(repopaths, 'pagure')
def install(cls, project, dbobj): ''' Method called to install the hook for a project. :arg project: a ``pagure.model.Project`` object to which the hook should be installed ''' repopaths = [get_repo_path(project)] repo_obj = pygit2.Repository(repopaths[0]) # Configure the hook repo_obj.config.set_multivar('multimailhook.mailingList', '', dbobj.mail_to) repo_obj.config.set_multivar('multimailhook.environment', '', 'gitolite') # Install the hook itself cls.base_install(repopaths, dbobj, 'mail', 'git_multimail.py')
def set_request(): """ Prepare every request. """ flask.session.permanent = True if not hasattr(flask.g, "session") or not flask.g.session: flask.g.session = pagure.lib.query.create_session( flask.current_app.config["DB_URL"]) flask.g.version = pagure.__version__ flask.g.confirmationform = pagure.forms.ConfirmationForm() # The API namespace has its own way of getting repo and username and # of handling errors if flask.request.blueprint == "api_ns": return flask.g.forkbuttonform = None if pagure.utils.authenticated(): flask.g.forkbuttonform = pagure.forms.ConfirmationForm() # Force logout if current session started before users' # refuse_sessions_before login_time = flask.g.fas_user.login_time # This is because flask_fas_openid will store this as a posix timestamp if not isinstance(login_time, datetime.datetime): login_time = datetime.datetime.utcfromtimestamp(login_time) user = _get_user(username=flask.g.fas_user.username) if (user.refuse_sessions_before and login_time < user.refuse_sessions_before): logout() return flask.redirect(flask.url_for("ui_ns.index")) flask.g.justlogedout = flask.session.get("_justloggedout", False) if flask.g.justlogedout: flask.session["_justloggedout"] = None flask.g.new_user = False if flask.session.get("_new_user"): flask.g.new_user = True flask.session["_new_user"] = False flask.g.authenticated = pagure.utils.authenticated() flask.g.admin = pagure.utils.is_admin() # Retrieve the variables in the URL args = flask.request.view_args or {} # Check if there is a `repo` and an `username` repo = args.get("repo") username = args.get("username") namespace = args.get("namespace") # If there isn't a `repo` in the URL path, or if there is but the # endpoint called is part of the API, just don't do anything if repo: flask.g.repo = pagure.lib.query.get_authorized_project( flask.g.session, repo, user=username, namespace=namespace) if flask.g.authenticated: flask.g.repo_forked = pagure.lib.query.get_authorized_project( flask.g.session, repo, user=flask.g.fas_user.username, namespace=namespace, ) flask.g.repo_starred = pagure.lib.query.has_starred( flask.g.session, flask.g.repo, user=flask.g.fas_user.username) if (not flask.g.repo and namespace and pagure_config.get("OLD_VIEW_COMMIT_ENABLED", False) and len(repo) == 40): return flask.redirect( flask.url_for( "ui_ns.view_commit", repo=namespace, commitid=repo, username=username, namespace=None, )) if flask.g.repo is None: flask.abort(404, "Project not found") flask.g.reponame = get_repo_path(flask.g.repo) flask.g.repo_obj = pygit2.Repository(flask.g.reponame) flask.g.repo_admin = pagure.utils.is_repo_admin(flask.g.repo) flask.g.repo_committer = pagure.utils.is_repo_committer(flask.g.repo) flask.g.repo_user = pagure.utils.is_repo_user(flask.g.repo) flask.g.branches = sorted(flask.g.repo_obj.listall_branches()) repouser = flask.g.repo.user.user if flask.g.repo.is_fork else None fas_user = flask.g.fas_user if pagure.utils.authenticated() else None flask.g.repo_watch_levels = pagure.lib.query.get_watch_level_on_repo( flask.g.session, fas_user, flask.g.repo.name, repouser=repouser, namespace=namespace, ) items_per_page = pagure_config["ITEM_PER_PAGE"] flask.g.offset = 0 flask.g.page = 1 flask.g.limit = items_per_page page = flask.request.args.get("page") limit = flask.request.args.get("n") if limit: try: limit = int(limit) except ValueError: limit = 10 if limit > 500 or limit <= 0: limit = items_per_page flask.g.limit = limit if page: try: page = abs(int(page)) except ValueError: page = 1 if page <= 0: page = 1 flask.g.page = page flask.g.offset = (page - 1) * flask.g.limit
def set_request(): """ Prepare every request. """ flask.session.permanent = True flask.g.session = pagure.lib.create_session( flask.current_app.config['DB_URL']) flask.g.version = pagure.__version__ # The API namespace has its own way of getting repo and username and # of handling errors if flask.request.blueprint == 'api_ns': return flask.g.forkbuttonform = None if pagure.utils.authenticated(): flask.g.forkbuttonform = pagure.forms.ConfirmationForm() flask.g.justlogedout = flask.session.get('_justloggedout', False) if flask.g.justlogedout: flask.session['_justloggedout'] = None flask.g.new_user = False if flask.session.get('_new_user'): flask.g.new_user = True flask.session['_new_user'] = False flask.g.authenticated = pagure.utils.authenticated() flask.g.admin = pagure.utils.is_admin() # Retrieve the variables in the URL args = flask.request.view_args or {} # Check if there is a `repo` and an `username` repo = args.get('repo') username = args.get('username') namespace = args.get('namespace') # If there isn't a `repo` in the URL path, or if there is but the # endpoint called is part of the API, just don't do anything if repo: flask.g.repo = pagure.lib.get_authorized_project(flask.g.session, repo, user=username, namespace=namespace) if flask.g.authenticated: flask.g.repo_forked = pagure.lib.get_authorized_project( flask.g.session, repo, user=flask.g.fas_user.username, namespace=namespace) flask.g.repo_starred = pagure.lib.has_starred( flask.g.session, flask.g.repo, user=flask.g.fas_user.username, ) if not flask.g.repo \ and namespace \ and pagure_config.get('OLD_VIEW_COMMIT_ENABLED', False) \ and len(repo) == 40: return flask.redirect( flask.url_for('ui_ns.view_commit', repo=namespace, commitid=repo, username=username, namespace=None)) if flask.g.repo is None: flask.abort(404, 'Project not found') flask.g.reponame = get_repo_path(flask.g.repo) flask.g.repo_obj = pygit2.Repository(flask.g.reponame) flask.g.repo_admin = pagure.utils.is_repo_admin(flask.g.repo) flask.g.repo_committer = pagure.utils.is_repo_committer(flask.g.repo) flask.g.repo_user = pagure.utils.is_repo_user(flask.g.repo) flask.g.branches = sorted(flask.g.repo_obj.listall_branches()) repouser = flask.g.repo.user.user if flask.g.repo.is_fork else None fas_user = flask.g.fas_user if pagure.utils.authenticated() else None flask.g.repo_watch_levels = pagure.lib.get_watch_level_on_repo( flask.g.session, fas_user, flask.g.repo.name, repouser=repouser, namespace=namespace) items_per_page = pagure_config['ITEM_PER_PAGE'] flask.g.offset = 0 flask.g.page = 1 flask.g.limit = items_per_page page = flask.request.args.get('page') limit = flask.request.args.get('n') if limit: try: limit = int(limit) except ValueError: limit = 10 if limit > 500 or limit <= 0: limit = items_per_page flask.g.limit = limit if page: try: page = abs(int(page)) except ValueError: page = 1 if page <= 0: page = 1 flask.g.page = page flask.g.offset = (page - 1) * flask.g.limit
def set_request(): """ Prepare every request. """ flask.session.permanent = True if not hasattr(flask.g, "session") or not flask.g.session: flask.g.session = pagure.lib.model_base.create_session( flask.current_app.config["DB_URL"]) flask.g.main_app = flask.current_app flask.g.version = pagure.__version__ flask.g.confirmationform = pagure.forms.ConfirmationForm() flask.g.nonce = pagure.lib.login.id_generator(size=25, chars=string.ascii_letters + string.digits) flask.g.issues_enabled = pagure_config.get("ENABLE_TICKETS", True) # The API namespace has its own way of getting repo and username and # of handling errors if flask.request.blueprint == "api_ns": return flask.g.forkbuttonform = None if pagure.utils.authenticated(): flask.g.forkbuttonform = pagure.forms.ConfirmationForm() # Force logout if current session started before users' # refuse_sessions_before login_time = flask.g.fas_user.login_time # This is because flask_fas_openid will store this as a posix timestamp if not isinstance(login_time, datetime.datetime): login_time = datetime.datetime.utcfromtimestamp(login_time) user = _get_user(username=flask.g.fas_user.username) if (user.refuse_sessions_before and login_time < user.refuse_sessions_before): logout() return flask.redirect(flask.url_for("ui_ns.index")) flask.g.justlogedout = flask.session.get("_justloggedout", False) if flask.g.justlogedout: flask.session["_justloggedout"] = None flask.g.new_user = False if flask.session.get("_new_user"): flask.g.new_user = True flask.session["_new_user"] = False flask.g.authenticated = pagure.utils.authenticated() flask.g.admin = pagure.utils.is_admin() # Retrieve the variables in the URL args = flask.request.view_args or {} # Check if there is a `repo` and an `username` repo = args.get("repo") username = args.get("username") namespace = args.get("namespace") # If there isn't a `repo` in the URL path, or if there is but the # endpoint called is part of the API, just don't do anything if repo: flask.g.repo = pagure.lib.query.get_authorized_project( flask.g.session, repo, user=username, namespace=namespace) if flask.g.authenticated: flask.g.repo_forked = pagure.lib.query.get_authorized_project( flask.g.session, repo, user=flask.g.fas_user.username, namespace=namespace, ) flask.g.repo_starred = pagure.lib.query.has_starred( flask.g.session, flask.g.repo, user=flask.g.fas_user.username) # Block all POST request from blocked users if flask.g.repo and flask.request.method != "GET": if flask.g.fas_user.username in flask.g.repo.block_users: flask.abort( 403, description="You have been blocked from this project", ) if (not flask.g.repo and namespace and pagure_config.get("OLD_VIEW_COMMIT_ENABLED", False) and len(repo) == 40): return flask.redirect( flask.url_for( "ui_ns.view_commit", repo=namespace, commitid=repo, username=username, namespace=None, )) if flask.g.repo is None: flask.abort(404, description="Project not found") # If issues are not globally enabled, there is no point in continuing if flask.g.issues_enabled: ticket_namespaces = pagure_config.get("ENABLE_TICKETS_NAMESPACE") if ticket_namespaces and flask.g.repo.namespace: if flask.g.repo.namespace in (ticket_namespaces or []): # If the namespace is in the allowed list # issues are enabled flask.g.issues_enabled = True else: # If the namespace isn't in the list of namespaces # issues are disabled flask.g.issues_enabled = False flask.g.issues_project_disabled = False if not flask.g.repo.settings.get("issue_tracker", True): # If the project specifically disabled its issue tracker, # disable issues flask.g.issues_project_disabled = True flask.g.issues_enabled = False flask.g.reponame = get_repo_path(flask.g.repo) flask.g.repo_obj = pygit2.Repository(flask.g.reponame) flask.g.repo_admin = pagure.utils.is_repo_admin(flask.g.repo) flask.g.repo_committer = pagure.utils.is_repo_committer(flask.g.repo) flask.g.repo_user = pagure.utils.is_repo_user(flask.g.repo) flask.g.branches = sorted(flask.g.repo_obj.listall_branches()) repouser = flask.g.repo.user.user if flask.g.repo.is_fork else None fas_user = flask.g.fas_user if pagure.utils.authenticated() else None flask.g.repo_watch_levels = pagure.lib.query.get_watch_level_on_repo( flask.g.session, fas_user, flask.g.repo.name, repouser=repouser, namespace=namespace, ) items_per_page = pagure_config["ITEM_PER_PAGE"] flask.g.offset = 0 flask.g.page = 1 flask.g.limit = items_per_page page = flask.request.args.get("page") limit = flask.request.args.get("n") if limit: try: limit = int(limit) except ValueError: limit = 10 if limit > 500 or limit <= 0: limit = items_per_page flask.g.limit = limit if page: try: page = abs(int(page)) except ValueError: page = 1 if page <= 0: page = 1 flask.g.page = page flask.g.offset = (page - 1) * flask.g.limit