非强制上传模式下,要求HEAD游离且指向Tag

This commit is contained in:
2026-06-29 14:44:06 +08:00
parent 6b0f602e57
commit 0766d09e27
2 changed files with 33 additions and 28 deletions

View File

@@ -870,7 +870,7 @@ static void PrintUploadUsage()
_tprintf(_T("用法gitver upload username=<用户名> [file=<上传的文件>] [info=<配置.txt>] [url=<PMC基址>] [-f]\n")); _tprintf(_T("用法gitver upload username=<用户名> [file=<上传的文件>] [info=<配置.txt>] [url=<PMC基址>] [-f]\n"));
_tprintf(_T("说明info= 缺省为 upload_info.txtfile= 可省略,从 info 的 file 字段读取\n")); _tprintf(_T("说明info= 缺省为 upload_info.txtfile= 可省略,从 info 的 file 字段读取\n"));
_tprintf(_T("说明:登录密码从与 username 同名的环境变量读取\n")); _tprintf(_T("说明:登录密码从与 username 同名的环境变量读取\n"));
_tprintf(_T("说明:默认要求当前在分支上且 HEAD 指向 Tag加 -f 可忽略 Tag 校验\n")); _tprintf(_T("说明:默认要求当前在分支上且 HEAD 指向 Tag加 -f 允许游离 HEAD 指向 Tag 时上传\n"));
_tprintf(_T("示例gitver upload username=admin\n")); _tprintf(_T("示例gitver upload username=admin\n"));
} }
@@ -881,27 +881,35 @@ static void PrintUploadUsage()
/// <returns>0 表示通过54 表示 HEAD 游离或未指向 Tag。</returns> /// <returns>0 表示通过54 表示 HEAD 游离或未指向 Tag。</returns>
static int ValidateUploadGitTagState(LPCTSTR lpRepoPath) static int ValidateUploadGitTagState(LPCTSTR lpRepoPath)
{ {
CString strStatus;
if (!TryGetGitStatus(lpRepoPath, strStatus))
{
CString strTag;
if (TryGetDetectedTag(lpRepoPath, strTag))
{
_tprintf(_T("错误: 当前处于 HEAD 游离状态Tag: %s不允许上传\n"), strTag.GetString());
}
else
{
_tprintf(_T("错误: 当前处于 HEAD 游离状态,不允许上传\n"));
}
_tprintf(_T("提示: 使用 upload ... -f 可强制上传\n"));
return 54;
}
CString strTag; CString strTag;
if (!TryGetDetectedTag(lpRepoPath, strTag)) if (!TryGetDetectedTag(lpRepoPath, strTag))
{ {
_tprintf(_T("错误: 当前 commit 未指向 Tag 标签,不允许上传\n")); _tprintf(_T("错误: 当前 commit 未指向 Tag 标签,不允许上传\n"));
_tprintf(_T("提示: 使用 upload ... -f 可强制上传\n")); return 54;
}
// 并且要处于游离状态;
CString strStatus;
if(TryGetGitStatus(lpRepoPath, strStatus))
{
_tprintf(_T("错误: 当前 HEAD 非游离,不允许上传\n"));
return 54;
}
return 0;
}
/// <summary>
/// 强制上传模式下的 Tag 校验:要求当前 commit 指向 Tag允许游离 HEAD
/// </summary>
/// <param name="lpRepoPath">仓库根目录。</param>
/// <returns>0 表示通过54 表示当前 commit 未指向 Tag。</returns>
static int ValidateUploadGitTagStateForce(LPCTSTR lpRepoPath)
{
CString strTag;
if (!TryGetDetectedTag(lpRepoPath, strTag))
{
_tprintf(_T("错误: 当前 commit 未指向 Tag 标签,不允许上传\n"));
return 54; return 54;
} }
@@ -1136,6 +1144,12 @@ int HandleUploadCommand(int argc, TCHAR* argv[])
return 3; return 3;
} }
if (!bForceUpload && (0 != ValidateUploadGitTagState(g_szCurModuleDir)))
{
_tprintf(_T("警告: 非强制上传模式下要求当前 commit 必须指向 Tag\n"));
return 54;
}
if (strUsername.IsEmpty()) if (strUsername.IsEmpty())
{ {
_tprintf(_T("错误: upload 缺少必填参数 username=\n")); _tprintf(_T("错误: upload 缺少必填参数 username=\n"));
@@ -1194,15 +1208,6 @@ int HandleUploadCommand(int argc, TCHAR* argv[])
return 49; return 49;
} }
if (!bForceUpload)
{
int nTagRet = ValidateUploadGitTagState(g_szCurModuleDir);
if (nTagRet != 0)
{
return nTagRet;
}
}
CString strPassword; CString strPassword;
if (!ResolvePasswordFromEnv(strUsername, strPassword)) if (!ResolvePasswordFromEnv(strUsername, strPassword))
{ {

View File

@@ -299,7 +299,7 @@ gitver setup=1 pid=5 repodir=E:\Code\MyProj
``` ```
gitver upload username=<用户名> [file=<上传文件>] [info=<配置.txt>] [url=<PMC基址>] gitver upload username=<用户名> [file=<上传文件>] [info=<配置.txt>] [url=<PMC基址>]
gitver upload username=<用户名> # 需在分支上且 HEAD 指向 Tag gitver upload username=<用户名> # 需在分支上且 HEAD 指向 Tag
gitver upload username=<用户名> -f # 强制上传,忽略 Tag 校验 gitver upload username=<用户名> -f # 游离 HEAD 指向 Tag 时强制上传
gitver upload -f username=<用户名> [file=<上传文件>] # -f 位置任意 gitver upload -f username=<用户名> [file=<上传文件>] # -f 位置任意
``` ```