mirror of
https://gitee.com/amber-ce/amber-pm
synced 2026-08-08 07:33:57 +08:00
修复有时错误地跳过覆盖内容的问题
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
Package: apm
|
Package: apm
|
||||||
Version: 1.1.6-1
|
Version: 1.1.6-2
|
||||||
Maintainer: shenmo <jifengshenmo@outlook.com>
|
Maintainer: shenmo <jifengshenmo@outlook.com>
|
||||||
Priority: optional
|
Priority: optional
|
||||||
Section: utils
|
Section: utils
|
||||||
|
|||||||
@@ -141,16 +141,44 @@ for pkg_dir in "$APM_BASE_DIR"/*/; do
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# 检查是否有文件需要更新(比较源文件和目标文件)
|
# 检查是否有文件需要更新(比较源文件和目标文件)
|
||||||
NEED_UPDATE=false
|
NEED_UPDATE=false
|
||||||
while IFS= read -r -d '' file; do
|
while IFS= read -r -d '' file; do
|
||||||
rel_path="${file#$OVERRIDE_SOURCE/}"
|
rel_path="${file#$OVERRIDE_SOURCE/}"
|
||||||
target_file="$target_dir/$rel_path"
|
target_file="$target_dir/$rel_path"
|
||||||
# 如果目标文件不存在或源文件更新,则需要更新
|
|
||||||
if [ ! -e "$target_file" ] || [ "$file" -nt "$target_file" ]; then
|
# 1. 目标文件不存在 ⇒ 需要更新
|
||||||
|
if [ ! -e "$target_file" ]; then
|
||||||
NEED_UPDATE=true
|
NEED_UPDATE=true
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
done < <(find "$OVERRIDE_SOURCE" -type f -print0 2>/dev/null)
|
|
||||||
|
# 2. 先比较文件大小(快速排除明显不同)
|
||||||
|
if [ "$(stat -c%s "$file")" -ne "$(stat -c%s "$target_file")" ]; then
|
||||||
|
NEED_UPDATE=true
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 3. 再比较哈希值(选择系统中可用的哈希工具)
|
||||||
|
if command -v md5sum >/dev/null 2>&1; then
|
||||||
|
hash_cmd="md5sum"
|
||||||
|
elif command -v sha256sum >/dev/null 2>&1; then
|
||||||
|
hash_cmd="sha256sum"
|
||||||
|
else
|
||||||
|
# 若两者都不可用,退化为直接二进制比较(较慢,但确保正确)
|
||||||
|
if ! cmp -s "$file" "$target_file"; then
|
||||||
|
NEED_UPDATE=true
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
source_hash=$($hash_cmd "$file" | awk '{print $1}')
|
||||||
|
target_hash=$($hash_cmd "$target_file" | awk '{print $1}')
|
||||||
|
if [ "$source_hash" != "$target_hash" ]; then
|
||||||
|
NEED_UPDATE=true
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done < <(find "$OVERRIDE_SOURCE" -type f -print0 2>/dev/null)
|
||||||
|
|
||||||
# 如果没有需要更新的文件,跳过
|
# 如果没有需要更新的文件,跳过
|
||||||
if [ "$NEED_UPDATE" = false ]; then
|
if [ "$NEED_UPDATE" = false ]; then
|
||||||
|
|||||||
Reference in New Issue
Block a user