adc
This commit is contained in:
parent
636c6d14bf
commit
503a6ec1b0
148
README.md
148
README.md
|
@ -1,5 +1,151 @@
|
|||
# abcd add haha ... git-auto-commit Action
|
||||
# add env
|
||||
# add env #!/usr/bin/env bash
|
||||
|
||||
|
||||
set -o pipefail
|
||||
|
||||
readonly DEFAULT_FILE_MAXSIZE_MB="30"
|
||||
readonly CONFIG_NAME="hooks.maxfilesize"
|
||||
readonly NULLSHA="0000000000000000000000000000000000000000"
|
||||
readonly EXIT_SUCCESS=0
|
||||
readonly EXIT_FAILURE=1
|
||||
readonly DEFAULT_REPO_MAXSIZE_MB="1024"
|
||||
readonly CHECK_FLAG_ON=1
|
||||
|
||||
env
|
||||
|
||||
echo "CHECK_FLAG_ON=====$CHECK_FLAG_ON"
|
||||
echo "PUSH_SIZE_CHECK_FLAG=====$PUSH_SIZE_CHECK_FLAG"
|
||||
|
||||
status="$EXIT_SUCCESS"
|
||||
|
||||
# skip this hook entirely if shell check is not open
|
||||
check_flag=1 #${PUSH_SIZE_CHECK_FLAG}
|
||||
if [[ $check_flag != $CHECK_FLAG_ON ]]; then
|
||||
exit $EXIT_SUCCESS
|
||||
fi
|
||||
|
||||
export REPO_MAX_SIZE=50
|
||||
|
||||
echo "REPO_MAX_FILE_SIZE===${REPO_MAX_FILE_SIZE}"
|
||||
echo "REPO_MAX_SIZE===${REPO_MAX_SIZE}"
|
||||
echo "REPO_CURRENT_SIZE===${REPO_CURRENT_SIZE}"
|
||||
|
||||
|
||||
|
||||
|
||||
#######################################
|
||||
# check the file max size limit
|
||||
#######################################
|
||||
|
||||
# get maximum filesize (from repository-specific config)
|
||||
maxsize_mb="${REPO_MAX_FILE_SIZE}"
|
||||
|
||||
if [[ "$?" != $EXIT_SUCCESS ]]; then
|
||||
echo "failed to get ${CONFIG_NAME} from config"
|
||||
exit "$EXIT_FAILURE"
|
||||
fi
|
||||
|
||||
push_size="0"
|
||||
# read lines from stdin (format: "<oldref> <newref> <refname>\n")
|
||||
while read oldref newref refname; do
|
||||
# skip branch deletions
|
||||
if [[ "$newref" == "$NULLSHA" ]]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
# find large objects
|
||||
# check all objects from $oldref (possible $NULLSHA) to $newref, but
|
||||
# skip all objects that have already been accepted (i.e. are referenced by
|
||||
# another branch or tag).
|
||||
|
||||
new_branch_flag=0
|
||||
if [[ "$oldref" == "$NULLSHA" ]]; then
|
||||
target="$newref"
|
||||
new_branch_flag=1
|
||||
echo "You are creating a new remote branch,openI will check all files in commit history to find oversize files"
|
||||
else
|
||||
target="${oldref}..${newref}"
|
||||
fi
|
||||
echo "target==${target}"
|
||||
|
||||
maxsize=`expr $maxsize_mb \* 1048576`
|
||||
|
||||
# find objects in this push_size
|
||||
# print like:
|
||||
# 08da8e2ab9ae4095bf94dd71ac913132b880b463 commit 214
|
||||
# 43e993b768ede5740e8c65de2ed6edec25053ea1 tree 185
|
||||
# 4476971d76569039df7569af1b8d03c288f6b193 blob 20167318 b0417e6593a1.zip
|
||||
files="$(git rev-list --objects "$target" | \
|
||||
git cat-file $'--batch-check=%(objectname) %(objecttype) %(objectsize) %(rest)' | \
|
||||
awk -F ' ' -v maxbytes="$maxsize" 'BEGIN {totalIn=0} {if( $3 > maxbytes && $2 == "blob") { totalIn+=$3; print $4} else { totalIn+=$3}} END { printf ("totalIn=\t%s",totalIn)}' )"
|
||||
|
||||
if [[ "$?" != $EXIT_SUCCESS ]]; then
|
||||
echo "failed to check for large files in ref ${refname}"
|
||||
continue
|
||||
fi
|
||||
|
||||
IFS=$'\n'
|
||||
# rewrite IFS to seperate line in $files
|
||||
for file in $files; do
|
||||
# if don't unset IFS,temp_array=(${file}) will get error answer
|
||||
|
||||
if [[ ${file} == totalIn=* ]]; then
|
||||
IFS=$'\t'
|
||||
temp_array=(${file})
|
||||
push_size=${temp_array[1]}
|
||||
continue
|
||||
fi
|
||||
unset IFS
|
||||
if [[ "$status" == $EXIT_SUCCESS ]]; then
|
||||
echo -e "Error: Your push was rejected because it contains files larger than $(numfmt --to=iec "$maxsize_mb") Mb"
|
||||
echo "help document -- https://openi.pcl.ac.cn/zeizei/OpenI_Learning/src/branch/master/docs/git/repository_capacity_help.md"
|
||||
echo "oversize files:"
|
||||
# status="$EXIT_FAILURE"
|
||||
fi
|
||||
echo -e "\033[31m- ${file}\033[0m "
|
||||
done
|
||||
|
||||
echo "push_size=======${push_size}"
|
||||
|
||||
if [[ "$status" != $EXIT_SUCCESS ]]; then
|
||||
exit "$status"
|
||||
fi
|
||||
|
||||
done
|
||||
|
||||
#######################################
|
||||
# check the repo max size limit
|
||||
#######################################
|
||||
if [[ $push_size -eq "0" ]]; then
|
||||
exit $EXIT_SUCCESS
|
||||
fi
|
||||
|
||||
# if create new branch or tag,use count-objects -v to get pack size
|
||||
if [[ $new_branch_flag -eq 1 ]]; then
|
||||
size_kb=`git count-objects -v | grep 'size-pack' | sed 's/.*\(size-pack:\).//'`
|
||||
size_pack_kb=`git count-objects -v | grep 'size:' | sed 's/.*\(size:\).//'`
|
||||
total_kb=`expr $size_kb + $size_pack_kb`
|
||||
let push_size=$total_kb*1024
|
||||
fi
|
||||
|
||||
sizelimit_mb="${REPO_MAX_SIZE}"
|
||||
let sizelimit_b=$sizelimit_mb*1024*1024
|
||||
|
||||
# repo size at here means the size of repo directory in server
|
||||
reposize_b=${REPO_CURRENT_SIZE}
|
||||
|
||||
total=`expr $push_size + $reposize_b`
|
||||
|
||||
if [ $total -gt $sizelimit_b ]; then
|
||||
echo "Error: Your push was rejected because the repository size is large than $sizelimit_mb Mb"
|
||||
echo "see the help document--https://openi.pcl.ac.cn/zeizei/OpenI_Learning/src/branch/master/docs/git/repository_capacity_help.md"
|
||||
exit $EXIT_FAILURE
|
||||
fi
|
||||
|
||||
|
||||
exit $EXIT_SUCCESS
|
||||
v
|
||||
|
||||
> The GitHub Action for committing files for the 80% use case.
|
||||
|
||||
|
|
Loading…
Reference in New Issue