fix:handling the issue of 'git remote prune origin' failing due to ref lock
This commit is contained in:
parent
64487cfe29
commit
0cfe979082
|
@ -1,7 +1,6 @@
|
||||||
import subprocess
|
import subprocess
|
||||||
import re
|
import re
|
||||||
|
|
||||||
# 执行 git fetch 命令并捕获输出
|
|
||||||
def git_fetch():
|
def git_fetch():
|
||||||
result = subprocess.run(['git', 'fetch'], capture_output=True, text=True)
|
result = subprocess.run(['git', 'fetch'], capture_output=True, text=True)
|
||||||
return result
|
return result
|
||||||
|
@ -14,14 +13,14 @@ def git_prune():
|
||||||
|
|
||||||
def parse_branch_name_type1(error_output):
|
def parse_branch_name_type1(error_output):
|
||||||
# error: cannot lock ref 'refs/remotes/origin/fix/3.0/TD-32817': is at 7af5 but expected eaba
|
# error: cannot lock ref 'refs/remotes/origin/fix/3.0/TD-32817': is at 7af5 but expected eaba
|
||||||
# 使用正则表达式匹配 'is at' 前的分支名称
|
# match the branch name before ‘is at’ with a regular expression
|
||||||
match = re.search(r"error: cannot lock ref '(refs/remotes/origin/[^']+)': is at", error_output)
|
match = re.search(r"error: cannot lock ref '(refs/remotes/origin/[^']+)': is at", error_output)
|
||||||
if match:
|
if match:
|
||||||
return match.group(1)
|
return match.group(1)
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def parse_branch_name_type2(error_output):
|
def parse_branch_name_type2(error_output):
|
||||||
# 使用正则表达式匹配 'exists; cannot create' 前的第一个引号内的分支名称
|
# match the branch name before ‘exists; cannot create’ with a regular expression
|
||||||
match = re.search(r"'(refs/remotes/origin/[^']+)' exists;", error_output)
|
match = re.search(r"'(refs/remotes/origin/[^']+)' exists;", error_output)
|
||||||
if match:
|
if match:
|
||||||
return match.group(1)
|
return match.group(1)
|
||||||
|
@ -29,7 +28,7 @@ def parse_branch_name_type2(error_output):
|
||||||
|
|
||||||
# parse branch name from error output of git remote prune origin
|
# parse branch name from error output of git remote prune origin
|
||||||
def parse_branch_name_type3(error_output):
|
def parse_branch_name_type3(error_output):
|
||||||
# 使用正则表达式匹配 'Unable to' 前的第一个引号内的分支名称
|
# match the branch name before the first single quote before 'Unable to' with a regular expression
|
||||||
# git error: could not delete references: cannot lock ref 'refs/remotes/origin/test/3.0/TS-4893': Unable to create 'D:/workspace/main/TDinternal/community/.git/refs/remotes/origin/test/3.0/TS-4893.lock': File exists
|
# git error: could not delete references: cannot lock ref 'refs/remotes/origin/test/3.0/TS-4893': Unable to create 'D:/workspace/main/TDinternal/community/.git/refs/remotes/origin/test/3.0/TS-4893.lock': File exists
|
||||||
match = re.search(r"references: cannot lock ref '(refs/remotes/origin/[^']+)': Unable to", error_output)
|
match = re.search(r"references: cannot lock ref '(refs/remotes/origin/[^']+)': Unable to", error_output)
|
||||||
if match:
|
if match:
|
||||||
|
@ -37,12 +36,11 @@ def parse_branch_name_type3(error_output):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
# 执行 git update-ref -d 命令
|
# execute git update-ref -d <branch_name> to delete the ref
|
||||||
def git_update_ref(branch_name):
|
def git_update_ref(branch_name):
|
||||||
if branch_name:
|
if branch_name:
|
||||||
subprocess.run(['git', 'update-ref', '-d', f'{branch_name}'], check=True)
|
subprocess.run(['git', 'update-ref', '-d', f'{branch_name}'], check=True)
|
||||||
|
|
||||||
# 解析错误类型并执行相应的修复操作
|
|
||||||
# parse error type and execute corresponding repair operation
|
# parse error type and execute corresponding repair operation
|
||||||
def handle_error(error_output):
|
def handle_error(error_output):
|
||||||
error_types = [
|
error_types = [
|
||||||
|
@ -61,18 +59,17 @@ def handle_error(error_output):
|
||||||
print(f"Error parsing branch name for {error_type[3]}.")
|
print(f"Error parsing branch name for {error_type[3]}.")
|
||||||
break
|
break
|
||||||
|
|
||||||
# 主函数
|
|
||||||
def main():
|
def main():
|
||||||
# fetch_result = git_fetch()
|
fetch_result = git_fetch()
|
||||||
# if fetch_result.returncode != 0: # 如果 git fetch 命令失败
|
if fetch_result.returncode != 0:
|
||||||
# error_output = fetch_result.stderr
|
error_output = fetch_result.stderr
|
||||||
# handle_error(error_output)
|
handle_error(error_output)
|
||||||
# else:
|
else:
|
||||||
# print("Git fetch successful.")
|
print("Git fetch successful.")
|
||||||
|
|
||||||
prune_result = git_prune()
|
prune_result = git_prune()
|
||||||
print(prune_result.returncode)
|
print(prune_result.returncode)
|
||||||
if prune_result.returncode != 0: # 如果 git fetch 命令失败
|
if prune_result.returncode != 0:
|
||||||
error_output = prune_result.stderr
|
error_output = prune_result.stderr
|
||||||
print(error_output)
|
print(error_output)
|
||||||
handle_error(error_output)
|
handle_error(error_output)
|
||||||
|
|
Loading…
Reference in New Issue