在代码合并python代码上更改JIRA状态

时间:2018-03-08 17:04:20

标签: python git jira

我想执行一个Python脚本,一旦我的分支与master合并,就会关闭JIRA的所有票证。任何人都可以帮我解决问题吗?

from __future__ import with_statement
from jira import JIRA, JIRAError
from requests.exceptions import ConnectionError

import cProfile
import logging
import sys
import os
import shutil
import logging.handlers


jiraEnabled = True
dashes = "---------------------------------------------------------------------"

import contextlib
import subprocess
import re
import collections
import getpass
import traceback
import pprint
import pdb
import stat
import cookielib
import subprocess
import urllib2
import ConfigParser
import string

def main():
    global username, password, loglevel, jiraCheckEnabled, url, allowed_states, check_assignee, check_state, disabled_on_branches
    configure_logging(loglevel)

    config_file = get_config_file("config.ini")

    error_code = handle_pre_receive()
    if error_code != 0:
        logging.error(“Hook failed please try later\n”)
    return error_code



# Performs the git "pre-receive" hook
def handle_pre_receive():
    line = sys.stdin.read()
    try:
        (old_commit_id, new_commit_id, ref) = line.strip().split()
    except ValueError:
            logging.error("\n%s", dashes)
            return -1

    if new_commit_id == "0000000000000000000000000000000000000000":
        logging.debug("Branch was deleted, going to skip commit")
        return 0

    if disabled_on_branch(git_get_branchname_from_ref(ref)):
        return 0

    commit_id_array = git_get_array_of_commit_ids(old_commit_id, new_commit_id)

    if commit_id_array == None or len(commit_id_array)==0:

        if old_commit_id == "0000000000000000000000000000000000000000":
                logging.debug("Branch was created, going to skip commit processing")
                return 0

        logging.error("No new commits found!")
        return -1

    if jiraEnabled:
        try:
            jira = JIRA(url,basic_auth=(username,password))
        except ConnectionError, e:
            logging.error("Failed to connect to JIRA")
            return 0
        except JIRAError, e:
            logging.error("JIRA has rejected  connection” )
            return 0;
    else:
        jira = None



def get_shell_cmd_output(cmd):
    try:
        proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
        return proc.stdout.read().rstrip('\n')
    except KeyboardInterrupt:
        logging.info("... interrupted")

    except Exception, e:
        logging.error("Failed trying to execute '%s'", cmd)

def disabled_on_branch(current_branchname):
    logging.debug("Test if '%s' is disabled...", current_branchname)
    if disabled_on_branches == None or string.strip(disabled_on_branches) == "":
        logging.debug("All branches enabled")
        return False

    branchlist = string.split(disabled_on_branches, ',')

    for branch in branchlist:
        branch = string.strip(branch)
        if current_branchname == branch:
            logging.debug("Current branch '%s' is disabled", current_branchname)
            return True

    logging.debug("Current branch '%s' is enabled", current_branchname)
    return False

def git_get_curr_branchname():
    buf = get_shell_cmd_output("git branch --no-color")
    # buf is a multiline output, each line containing a branch name
    # the line that starts with a "*" contains the current branch name

    m = re.search("^\* .*$", buf, re.MULTILINE)
    if m == None:
        return None

    return buf[m.start()+2 : m.end()]

def git_get_branchname_from_ref(ref):
    # "refs/heads/<branchname>"
    if string.find(ref, "refs/heads") != 0:
        logging.error("Invalid ref '%s'", ref)
        exit -1
    return string.strip(ref[len("refs/heads/"):])

def git_get_commit_msg(commit_id):
    return get_shell_cmd_output("git rev-list --pretty --max-count=1 " + commit_id)


#----------------------------------------------------------------------------
# python script entry point. Dispatches main()
if __name__ == "__main__":
    cProfile.run('main()')
    exit(0)

handle_pre_receive方法检查分支是否仍然启用。如果分支被禁用,我们必须关闭与该分支相关的所有JIRA票证。

0 个答案:

没有答案