记一次git hook踩坑(python编写hook脚本)

背景:项目内有个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脚本

你可能感兴趣的:(记一次git hook踩坑(python编写hook脚本))