#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
(c) 2018 - Copyright Red Hat Inc
Authors:
Patrick Uiterwijk <puiterwijk@redhat.com>
"""
from __future__ import print_function, absolute_import
import os
import sys
if os.environ.get("extra_internal_no_hooks", False):
# we do this check before any pagure machinery is imported
# and initialized to make sure this is very fast (used
# when pushing code from original repos to forks)
sys.exit(0)
# These fields get filled in by upload-repospanner-hooks
os.environ["PAGURE_CONFIG"] = "${config}"
PYPATH = "${pypath}"
# Prepare code imports
if PYPATH:
sys.path.insert(0, PYPATH)
import pagure
import pagure.lib.model_base
import pagure.lib.query
from pagure.hooks import run_project_hooks, extract_changes
from pagure.config import config as pagure_config
# Get information from the environment
hooktype = os.path.basename(sys.argv[0])
is_internal = os.environ.get("extra_internal", False) == "yes"
pushuser = os.environ["extra_username"]
repotype = os.environ["extra_repotype"]
project_name = os.environ["extra_project_name"]
project_user = os.environ.get("extra_project_user", None) or None
project_namespace = os.environ.get("extra_project_namespace", None) or None
pruid = os.environ.get("extra_pull_request_uid", None)
changes = extract_changes(from_stdin=hooktype != "update")
session = pagure.lib.model_base.create_session(pagure_config["DB_URL"])
if not session:
raise Exception("Unable to initialize db session")
gitdir = os.path.abspath(os.environ["GIT_DIR"])
project = pagure.lib.query._get_project(
session, project_name, project_user, project_namespace
)
if not project:
print("No project found")
sys.exit(1)
pull_request = None
if pruid:
pull_request = pagure.lib.query.get_request_by_uid(
session, pruid
)
run_project_hooks(
session,
pushuser,
project,
hooktype,
repotype,
gitdir,
changes,
is_internal,
pull_request,
)