钩子配置功能
一、钩子配置入口
位于设置界面,配置完成后,提交时会自动识别并执行对应钩子脚本。
二、参数详情
- 名字:用户自定义脚本名字,名字需唯一
- 类型:包含Check-commit(提交前) 和 Post-commit(提交成功后) 两种
- 路径:触发钩子脚本的仓库路径
- 优先级:1-10,数字越大优先级越高
- 命令行:要执行的命令
后台提供参数:SERVER-PATH、LOCAL-PATH、LOG
SERVER-PATH:记录钩子脚本作用文件仓库路径的文件,一行一个地址
LOCAL-PATH:记录钩子脚本作用文件本地路径的文件,一行一个地址
LOG:记录当前提交log信息的文件 - 等待:如果等待脚本运行的结果,会有实时log,反之没有(默认等待)
- 强制执行:如果强制执行则错误弹窗会显示“忽略钩子重试”,反之不显示(默认强制执行)
注:钩子脚本的配置与服务器一一对应,若需要配置某个服务器的钩子参数,首先需要切换至对应服务器
三、运行示例
Log信息显示
错误信息显示
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文件测试通过