背景:项目内有个zip包需要发版时去网上更新,自定义一个pre-commit hook来解决。
hook逻辑编写(python)
创建一个 zip-update.py
#!/usr/bin/env python3
import os
import json
try:
result = os.popen('curl https://devapp.ficool.com/offline/offline_config.json').read()
result = json.loads(result)
pkgList = result['pkgList']
if len(pkgList) > 1:
raise Exception('脚本支持的版本中pkgList长度仅为1')
server_version = pkgList[0]['pkgVersion']
# os.system('pwd') /Users/ice/mobile-webnovel/android
config_json_path = "app/src/main/assets/html5/1/config.json"
config_json = json.loads(open(config_json_path).read())
local_version = config_json['version']
if int(local_version) != int(server_version):
raise Exception('本地h5离线包(%s) 和 服务端h5离线包(%s) 版本不一致!'
% (str(local_version), str(server_version)))
exit(0)
except Exception as e:
print(e)
print("something error when exec zip-update.py")
exit(-1)
使用软链接(可将脚本直接放到hooks文件夹下免这步)
ln -s ****/zip-update.py ****/hooks/zip-update.py
编写 pre-commit 脚本
pre-commit
#!/bin/sh
#exit 1
path=$(pwd)
echo $path
python3 "${path}/../.git/modules/android/hooks/zip-update.py"
总结
之前看 Git官方文档
说写hook可以用各种语言书写: any properly named executable scripts will work fine – you can write them in Ruby or Python or whatever language you are familiar with.
考虑到python写起来比shell方便,所以一开始我直接用python写好脚本并把文件命名为 pre-commit 放到 .hooks 目录下,但是 并没有起到作用
经过了一番尝试发现只能用上图那种方式: pre-commit文件用shell写,并且在这shell里面执行python脚本