钩子配置功能

一、钩子配置入口

位于设置界面,配置完成后,提交时会自动识别并执行对应钩子脚本。

hanger_1 hanger_2

二、参数详情

  1. 名字:用户自定义脚本名字,名字需唯一
  2. 类型:包含Check-commit(提交前) 和 Post-commit(提交成功后) 两种
  3. 路径:触发钩子脚本的仓库路径
  4. 优先级:1-10,数字越大优先级越高
  5. 命令行:要执行的命令
         后台提供参数:SERVER-PATHLOCAL-PATHLOG
         SERVER-PATH:记录钩子脚本作用文件仓库路径的文件,一行一个地址
         LOCAL-PATH:记录钩子脚本作用文件本地路径的文件,一行一个地址
         LOG:记录当前提交log信息的文件
  6. 等待:如果等待脚本运行的结果,会有实时log,反之没有(默认等待)
  7. 强制执行:如果强制执行则错误弹窗会显示“忽略钩子重试”,反之不显示(默认强制执行)

注:钩子脚本的配置与服务器一一对应,若需要配置某个服务器的钩子参数,首先需要切换至对应服务器

三、运行示例

Log信息显示

hanger_3

错误信息显示

hanger_4

SERVER-PATH文件

文件名:b08478dce31611ed912fb42e990c6342_server
内容:
//depot/测试123/1111.html
//depot/测试123/excel预览1.xltx
//depot/测试123/屏幕快照 2022-11-30 上午11.54.32.png
//depot/测试123/经典流传@.pdf

LOCAL-PATH文件

文件名:b08478dce31611ed912fb42e990c6342_local
内容:
E:/tool/test/depot/测试123/1111.html
E:/tool/test/depot/测试123/excel预览1.xltx
E:/tool/test/depot/测试123/屏幕快照 2022-11-30 上午11.54.32.png
E:/tool/test/depot/测试123/经典流传@.pdf

LOG文件

文件名:b08451cde31611edbd0db42e990c6342_log
内容:
test log

四、脚本示例

运行命令:

python E:/tool/ptrack/test.py

python2版本和python3版本各一个示例

Test.py(python3版本) 内容:

import io
import logging
import sys

if __name__ == '__main__':
    # 读取 SERVER-PATH 文件的地址
    server = sys.argv[sys.argv.index('--SERVER-PATH') + 1]
    # 读取 LOCAL-PATH 文件的地址
    local = sys.argv[sys.argv.index('--LOCAL-PATH') + 1]
    # 读取 LOG 文件的地址
    log = sys.argv[sys.argv.index('--LOG') + 1]

    # 设置标准输出为utf-8
    sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
    sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8')
    # log作为标准输出
    logging.basicConfig(
        stream=sys.stdout,
        level=logging.DEBUG,
        format='%(levelname)s %(asctime)s - %(message)s',
    )
    logger = logging.getLogger()

    logger.info(server)
    logger.info(local)
    logger.info(log)

    with open(log, 'r', encoding='utf-8') as f:
        log = f.read()
        logger.info(log)

    with open(server, 'r', encoding='utf-8') as f:
        for line in f.readlines():
            depot_file = line.strip()
            logger.info(depot_file)

    with open(local, 'r', encoding='utf-8') as f:
        for line in f.readlines():
            local_file = line.strip()
            logger.info(local_file)

Test.py(python2版本) 内容:

# -*-coding:utf-8-*-

import logging
import sys

if __name__ == '__main__':
    # 读取 SERVER-PATH 文件的地址
    server = sys.argv[sys.argv.index('--SERVER-PATH') + 1]
    # 读取 LOCAL-PATH 文件的地址
    local = sys.argv[sys.argv.index('--LOCAL-PATH') + 1]
    # 读取 LOG 文件的地址
    log = sys.argv[sys.argv.index('--LOG') + 1]

    # log作为标准输出
    logging.basicConfig(
        stream=sys.stdout,
        level=logging.DEBUG,
        format='%(levelname)s %(asctime)s - %(message)s',
        encoding='utf-8'
    )
    logger = logging.getLogger()

    logger.info(server)
    logger.info(local)
    logger.info(log)

    with open(log, 'r') as f:
        log = f.read()
        logger.info(log)

    with open(server, 'r') as f:
        for line in f.readlines():
            depot_file = line.strip()
            logger.info(depot_file)

    with open(local, 'r') as f:
        for line in f.readlines():
            local_file = line.strip()
            logger.info(local_file)

注意事项:

1、如果要运行python脚本并实时输出log,请确认输出log使用utf-8编码,否则读取log时会出现编码解析错误类似:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb9 in position 163: invalid start byte
2、目前py、bat文件测试通过