mirror of
http://gitea.winboll.cc/Studio/WinBoLL.git
synced 2026-07-04 22:29:33 +08:00
Compare commits
15 Commits
e3166b639e
...
eb3d8f4806
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
eb3d8f4806 | ||
| aa1b701c8b | |||
| fc20bd56b4 | |||
| e92538850f | |||
| 81b7af0ec4 | |||
| e2b4bddb61 | |||
| cbca61ad84 | |||
| 28bc3a86e3 | |||
| 79f7f682b3 | |||
| 8fa09a9f99 | |||
| 555c5deef9 | |||
| 3707891e0b | |||
| 0c9c6c9fd4 | |||
| be3d042ade | |||
|
|
33dc49267e |
@@ -1,81 +1,44 @@
|
|||||||
#!/system/bin/sh
|
#!/system/bin/sh
|
||||||
## 合并其他项目分支的模块源码到projects_keeper_tag分支。
|
## 逻辑:按时间取最新标签 → 拉取该标签目录合并
|
||||||
|
|
||||||
# ====================== 函数定义:获取模块最新提交对应的远程标签 ======================
|
# 按创建时间取模块最新标签(最新打的标签排最后)
|
||||||
# 参数1:模块名(小写如appbase、aes)
|
get_latest_module_tag(){
|
||||||
# 自动以 origin/模块名 作为远程分支
|
local mod=$1
|
||||||
# 返回:有标签输出标签名,无标签输出空
|
git for-each-ref --sort=-creatordate --format='%(refname)' refs/tags/${mod}-* \
|
||||||
get_module_latest_tag() {
|
|
||||||
local module_dir="$1"
|
|
||||||
local remote_branch="origin/${module_dir}"
|
|
||||||
|
|
||||||
# 先同步远程分支元数据
|
|
||||||
git fetch origin "$module_dir" 2>/dev/null
|
|
||||||
|
|
||||||
# 修复:取整个远程分支最新Commit,不限制子目录
|
|
||||||
local latest_commit
|
|
||||||
latest_commit=$(git log -1 --pretty=format:%H "$remote_branch" 2>/dev/null)
|
|
||||||
|
|
||||||
echo " 调试:模块[$module_dir] 远程分支最新Commit = $latest_commit"
|
|
||||||
|
|
||||||
# 无commit直接返回空
|
|
||||||
if [ -z "$latest_commit" ]; then
|
|
||||||
echo " 调试:未获取到有效Commit,跳过"
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 精准匹配:模块名- 开头标签 + 严格比对commit哈希
|
|
||||||
git ls-remote --tags origin "${module_dir}-*" 2>/dev/null \
|
|
||||||
| grep -v '\^{}' \
|
| grep -v '\^{}' \
|
||||||
| awk -v target_commit="$latest_commit" '$1 == target_commit {print $2}' \
|
| head -1 \
|
||||||
| sed "s/refs\/tags\///"
|
| sed 's/refs\/tags\///'
|
||||||
}
|
}
|
||||||
|
|
||||||
# ====================== 0. 进入目标目录 ======================
|
# 通过标签获取commit
|
||||||
|
get_commit_from_tag(){
|
||||||
|
local tag=$1
|
||||||
|
git rev-parse --short "${tag}^{commit}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 工作目录
|
||||||
TARGET_DIR="/sdcard/AppProjects/Projects_Keeper_Tag"
|
TARGET_DIR="/sdcard/AppProjects/Projects_Keeper_Tag"
|
||||||
|
echo "进入目录:${TARGET_DIR}"
|
||||||
|
cd "${TARGET_DIR}" || exit 1
|
||||||
|
|
||||||
echo "切换工作目录到:$TARGET_DIR"
|
# 同步远程
|
||||||
if ! cd "$TARGET_DIR"; then
|
echo "========================================"
|
||||||
echo "=============================================="
|
echo "同步远程分支与全部版本标签"
|
||||||
echo "错误:无法进入目标目录 $TARGET_DIR"
|
echo "========================================"
|
||||||
echo "=============================================="
|
git fetch origin --prune
|
||||||
exit 1
|
git fetch origin --tags
|
||||||
fi
|
echo "同步完成"
|
||||||
|
|
||||||
# ====================== 1. 拉取远程最新源码(失败直接退出) ======================
|
|
||||||
echo "=============================================="
|
|
||||||
echo "正在拉取远程最新源码..."
|
|
||||||
echo "=============================================="
|
|
||||||
if ! git pull; then
|
|
||||||
echo "=============================================="
|
|
||||||
echo "错误:拉取远程源码失败!"
|
|
||||||
echo "请检查网络、仓库冲突或手动处理 git 状态后再执行脚本。"
|
|
||||||
echo "=============================================="
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
echo "✅ 源码已拉取为最新状态"
|
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
# ====================== 2. 目录路径检查 ======================
|
# 校验目标分支
|
||||||
CUR_DIR=$(pwd)
|
NOW_BRANCH=$(git symbolic-ref --short HEAD)
|
||||||
if [ "$CUR_DIR" != "$TARGET_DIR" ]; then
|
|
||||||
echo "错误:当前目录不是项目根目录!"
|
|
||||||
echo "请先进入目录:$TARGET_DIR"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# ====================== 3. Git 分支检查 ======================
|
|
||||||
CUR_BRANCH=$(git symbolic-ref --short HEAD 2>/dev/null)
|
|
||||||
TARGET_BRANCH="projects_keeper_tag"
|
TARGET_BRANCH="projects_keeper_tag"
|
||||||
|
if [ "${NOW_BRANCH}" != "${TARGET_BRANCH}" ];then
|
||||||
if [ "$CUR_BRANCH" != "$TARGET_BRANCH" ]; then
|
echo "错误:请先切换到 ${TARGET_BRANCH} 分支"
|
||||||
echo "错误:当前不在 $TARGET_BRANCH 分支!"
|
|
||||||
echo "当前分支:$CUR_BRANCH"
|
|
||||||
echo "请先执行:git checkout $TARGET_BRANCH"
|
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# ====================== 4. 预设标准模块列表 ======================
|
# 目录结构校验
|
||||||
MERGE_OBJECTS_LIST=(
|
MERGE_OBJECTS_LIST=(
|
||||||
.git
|
.git
|
||||||
.gitignore
|
.gitignore
|
||||||
@@ -112,121 +75,71 @@ winboll
|
|||||||
winboll.properties-demo
|
winboll.properties-demo
|
||||||
)
|
)
|
||||||
|
|
||||||
# ====================== 5. 获取当前目录真实文件列表 ======================
|
|
||||||
REAL_ITEMS=()
|
REAL_ITEMS=()
|
||||||
while IFS= read -r line; do
|
while IFS= read -r line; do
|
||||||
if [[ "$line" != "." && "$line" != ".." ]]; then
|
[[ $line != "." && $line != ".." ]] && REAL_ITEMS+=("$line")
|
||||||
REAL_ITEMS+=("$line")
|
|
||||||
fi
|
|
||||||
done < <(ls -a)
|
done < <(ls -a)
|
||||||
|
|
||||||
# ====================== 6. 差异比对函数 ======================
|
check_diff(){
|
||||||
check_diff() {
|
local miss=() extra=()
|
||||||
local missing=()
|
for i in "${MERGE_OBJECTS_LIST[@]}";do
|
||||||
local extra=()
|
[[ ! " ${REAL_ITEMS[@]} " =~ " ${i} " ]] && miss+=("$i")
|
||||||
|
|
||||||
for item in "${MERGE_OBJECTS_LIST[@]}"; do
|
|
||||||
local found=0
|
|
||||||
for r in "${REAL_ITEMS[@]}"; do
|
|
||||||
if [[ "$item" == "$r" ]]; then
|
|
||||||
found=1
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
if (( found == 0 )); then
|
|
||||||
missing+=("$item")
|
|
||||||
fi
|
|
||||||
done
|
done
|
||||||
|
for i in "${REAL_ITEMS[@]}";do
|
||||||
for r in "${REAL_ITEMS[@]}"; do
|
[[ ! " ${MERGE_OBJECTS_LIST[@]} " =~ " ${i} " ]] && extra+=("$i")
|
||||||
local found=0
|
|
||||||
for item in "${MERGE_OBJECTS_LIST[@]}"; do
|
|
||||||
if [[ "$item" == "$r" ]]; then
|
|
||||||
found=1
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
if (( found == 0 )); then
|
|
||||||
extra+=("$r")
|
|
||||||
fi
|
|
||||||
done
|
done
|
||||||
|
if [[ ${#miss[@]} -gt 0 || ${#extra[@]} -gt 0 ]];then
|
||||||
if [[ ${#missing[@]} -gt 0 || ${#extra[@]} -gt 0 ]]; then
|
echo "本地目录结构不一致,终止运行"
|
||||||
echo "=============================================="
|
|
||||||
echo "【错误】合并环境与脚本预设列表不匹配!"
|
|
||||||
echo "请手动核对并修改合并脚本。"
|
|
||||||
echo "=============================================="
|
|
||||||
|
|
||||||
if [[ ${#missing[@]} -gt 0 ]]; then
|
|
||||||
echo -e "\n👉 本地缺失项目:"
|
|
||||||
for m in "${missing[@]}"; do echo " $m"; done
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ ${#extra[@]} -gt 0 ]]; then
|
|
||||||
echo -e "\n👉 本地多余项目:"
|
|
||||||
for e in "${extra[@]}"; do echo " $e"; done
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo -e "\n=============================================="
|
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# 执行差异校验
|
|
||||||
check_diff
|
check_diff
|
||||||
|
|
||||||
# ====================== 全部校验通过,继续执行合并 ======================
|
echo -e "#@@@ 按时间获取最新标签合并模块源码 @@@#"
|
||||||
echo -e "#@@@ 开始合并模块源码 @@@#
|
|
||||||
## 目标合并对象列表:"
|
|
||||||
|
|
||||||
for item in "${MERGE_OBJECTS_LIST[@]}"; do
|
# 应用型模块
|
||||||
echo "$item"
|
MERGE_APP_PROJECT_LIST=(DemoAPP)
|
||||||
done
|
echo -e "---------- 应用型模块 ----------"
|
||||||
|
for name in "${MERGE_APP_PROJECT_LIST[@]}";do
|
||||||
echo -e "## 对象列表结束
|
low_name=$(echo "$name" | tr 'A-Z' 'a-z')
|
||||||
"
|
tag=$(get_latest_module_tag "${low_name}")
|
||||||
|
if [[ -z "${tag}" ]];then
|
||||||
## 合并 APP 项目
|
echo "跳过 ${low_name}:无远程标签"
|
||||||
MERGE_APP_PROJECT_LIST=(
|
|
||||||
DemoAPP
|
|
||||||
)
|
|
||||||
echo -e "#@@@ 开始合并应用型模块源码 @@@#"
|
|
||||||
|
|
||||||
for item in "${MERGE_APP_PROJECT_LIST[@]}"; do
|
|
||||||
item_lower=$(echo "$item" | tr 'A-Z' 'a-z')
|
|
||||||
MOD_TAG=$(get_module_latest_tag "$item_lower")
|
|
||||||
# 无标签直接跳过所有操作:不checkout、不add、不commit
|
|
||||||
if [ -z "$MOD_TAG" ]; then
|
|
||||||
echo "跳过 $item_lower :最新提交未打标签"
|
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
echo "合并 $item_lower (远程分支:origin/$item_lower,标签:$MOD_TAG)"
|
commit=$(get_commit_from_tag "${tag}")
|
||||||
git checkout origin/$item_lower $item_lower
|
if [[ -z "${commit}" ]];then
|
||||||
git add .
|
echo "跳过 ${low_name}:标签无有效提交点"
|
||||||
git commit -m "合并 $item 项目,$MOD_TAG"
|
|
||||||
done
|
|
||||||
|
|
||||||
## 合并 LIB 项目
|
|
||||||
MERGE_LIB_PROJECT_LIST=(
|
|
||||||
WinBoLL
|
|
||||||
APPBase
|
|
||||||
AES
|
|
||||||
)
|
|
||||||
echo -e "#@@@ 开始合并类库型模块源码 @@@#"
|
|
||||||
|
|
||||||
for item in "${MERGE_LIB_PROJECT_LIST[@]}"; do
|
|
||||||
item_lower=$(echo "$item" | tr 'A-Z' 'a-z')
|
|
||||||
MOD_TAG=$(get_module_latest_tag "$item_lower")
|
|
||||||
# 无标签直接跳过所有操作
|
|
||||||
if [ -z "$MOD_TAG" ]; then
|
|
||||||
echo "跳过 $item_lower :最新提交未打标签"
|
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
echo "合并 $item_lower (远程分支:origin/$item_lower,标签:$MOD_TAG)"
|
echo "模块:${low_name} 最新时间标签:${tag} 提交ID:${commit}"
|
||||||
git checkout origin/$item_lower $item_lower lib$item_lower
|
# 强制拉取覆盖
|
||||||
git add .
|
git checkout -f "${tag}" -- "${low_name}"
|
||||||
git commit -m "合并 $item 项目,$MOD_TAG"
|
git add "${low_name}"
|
||||||
|
git commit -m "合并模块${name} 同步最新时间标签${tag}"
|
||||||
done
|
done
|
||||||
|
|
||||||
echo '正在推送 Projects_Keeper 项目'
|
# 类库模块
|
||||||
|
MERGE_LIB_PROJECT_LIST=(WinBoLL APPBase AES)
|
||||||
|
echo -e "---------- 类库模块 ----------"
|
||||||
|
for name in "${MERGE_LIB_PROJECT_LIST[@]}";do
|
||||||
|
low_name=$(echo "$name" | tr 'A-Z' 'a-z')
|
||||||
|
tag=$(get_latest_module_tag "${low_name}")
|
||||||
|
if [[ -z "${tag}" ]];then
|
||||||
|
echo "跳过 ${low_name}:无远程标签"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
commit=$(get_commit_from_tag "${tag}")
|
||||||
|
if [[ -z "${commit}" ]];then
|
||||||
|
echo "跳过 ${low_name}:标签无有效提交点"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
echo "模块:${low_name} 最新时间标签:${tag} 提交ID:${commit}"
|
||||||
|
git checkout -f "${tag}" -- "${low_name}" "lib${low_name}"
|
||||||
|
git add "${low_name}" "lib${low_name}"
|
||||||
|
git commit -m "合并模块${name} 同步最新时间标签${tag}"
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "全部模块合并执行完毕"
|
||||||
|
echo "执行推送:git push"
|
||||||
git push
|
git push
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
#Created by .winboll/winboll_app_build.gradle
|
#Created by .winboll/winboll_app_build.gradle
|
||||||
#Sat May 16 09:15:15 GMT 2026
|
#Sun May 17 16:16:36 HKT 2026
|
||||||
stageCount=10
|
stageCount=16
|
||||||
libraryProject=libappbase
|
libraryProject=libappbase
|
||||||
baseVersion=15.20
|
baseVersion=15.20
|
||||||
publishVersion=15.20.9
|
publishVersion=15.20.15
|
||||||
buildCount=7
|
buildCount=0
|
||||||
baseBetaVersion=15.20.10
|
baseBetaVersion=15.20.16
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
#Created by .winboll/winboll_app_build.gradle
|
#Created by .winboll/winboll_app_build.gradle
|
||||||
#Sat May 16 09:15:15 GMT 2026
|
#Sun May 17 16:16:36 HKT 2026
|
||||||
stageCount=10
|
stageCount=16
|
||||||
libraryProject=libappbase
|
libraryProject=libappbase
|
||||||
baseVersion=15.20
|
baseVersion=15.20
|
||||||
publishVersion=15.20.9
|
publishVersion=15.20.15
|
||||||
buildCount=7
|
buildCount=0
|
||||||
baseBetaVersion=15.20.10
|
baseBetaVersion=15.20.16
|
||||||
|
|||||||
@@ -135,7 +135,7 @@ public class LogUtils {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final long KEEP_FILE_SIZE = 512000L; // 500K
|
final long KEEP_FILE_SIZE = 25000L; // ~25KB 确保剪贴板可完整复制
|
||||||
final long MAX_FILE_SIZE = 2*KEEP_FILE_SIZE;
|
final long MAX_FILE_SIZE = 2*KEEP_FILE_SIZE;
|
||||||
final long fileSize = _mfLogCatchFile.length();
|
final long fileSize = _mfLogCatchFile.length();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user