开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
master
分支 (2)
标签 (2)
master
feat/add_timeout
v1.0.0_beta2
v1.0.0_beta1
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
项目仓库所选许可证以仓库主分支所使用许可证为准
master
分支 (2)
标签 (2)
master
feat/add_timeout
v1.0.0_beta2
v1.0.0_beta1
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
master
分支 (2)
标签 (2)
master
feat/add_timeout
v1.0.0_beta2
v1.0.0_beta1
qpm
/
command_remove.py
qpm
/
command_remove.py
command_remove.py 5.39 KB
一键复制 编辑 原始数据 按行查看 历史
chenchi 提交于 2024年05月04日 21:06 +08:00 . Fixed bug that cannot remove submodule in Windows OS.
import os
import re
import sys
import subprocess
import shutil
import platform
from common import get_git_root, find_submodule_paths, get_project_root
def remove_dependency(pkg_path=None):
"""
Remove the specified submodule (if pkg_path is provided) or all submodules
within the current Git repository.
Args:
pkg_path (str, optional): Relative path of the submodule to remove. If None, all submodules will be removed.
Raises:
FileNotFoundError: If the .gitmodules file is not found in the repository root.
ValueError: If the provided pkg_path is not a valid submodule or is not within the current Git repository.
"""
try:
repo_root = get_git_root()
submodule_paths_rel = find_submodule_paths(repo_root)
submodule_paths_abs = [os.path.abspath(os.path.join(repo_root, rel_path)) for rel_path in submodule_paths_rel]
if not submodule_paths_abs:
print("No submodules found in the current repository.")
return
gitmodules_path = os.path.join(repo_root, '.gitmodules')
# Keep track of removed submodule relative paths
removed_submodule_paths = []
if pkg_path:
# Make pkg_path absolute based on the current working directory
pkg_path_abs = os.path.abspath(os.path.join(repo_root, pkg_path))
# Check if pkg_path is within the current Git repository
if not pkg_path_abs.startswith(repo_root):
print(f"Error: '{pkg_path}' is not within the current Git repository.")
sys.exit(1)
# Remove a single submodule
if pkg_path_abs not in submodule_paths_abs:
print(f"Error: '{pkg_path}' is not a valid submodule in the current repository.")
sys.exit(1)
# Verify that the provided pkg_path is a valid Git submodule
submodule_git_file = os.path.join(pkg_path_abs, '.git')
if not os.path.isfile(submodule_git_file):
print(f"Error: '{pkg_path}' is not a valid Git submodule.")
sys.exit(1)
print(f"Removing submodule '{pkg_path}'...")
subprocess.run(['git', 'submodule', 'deinit', '--force', pkg_path_abs])
subprocess.run(['git', 'rm', '--cached', '-r', pkg_path_abs])
shutil.rmtree(pkg_path_abs)
# Calculate the relative path of the submodule from the repository root
pkg_path_rel = os.path.relpath(pkg_path_abs, start=repo_root)
# Add the removed submodule's relative path to the list
removed_submodule_paths.append(pkg_path_rel)
else:
# Remove all submodules
print("Removing all submodules...")
for submodule_path in submodule_paths_abs:
submodule_git_file = os.path.join(submodule_path, '.git')
if not os.path.isfile(submodule_git_file):
print(f"Error: '{submodule_path}' is not a valid Git submodule.")
sys.exit(1)
subprocess.run(['git', 'submodule', 'deinit', '--force', submodule_path])
subprocess.run(['git', 'rm', '--cached', '-r', submodule_path])
shutil.rmtree(submodule_path)
# Add the removed submodule's relative path to the list
removed_submodule_paths.append(os.path.relpath(submodule_path, start=repo_root))
# Compute the relative path of the current Git repository to the top-level Git repository
current_repo_to_top_level_rel = os.path.relpath(repo_root, start=get_project_root())
# Iterate over the removed submodule relative paths
for submodule_path_rel in removed_submodule_paths:
# Compute the relative path of the submodule to the top-level Git repository
submodule_to_top_level_rel = os.path.join(current_repo_to_top_level_rel, submodule_path_rel)
# Compute the absolute path of the submodule directory in the top-level Git repository's .git/modules
top_level_submodule_dir = os.path.join(get_project_root(), '.git', 'modules', submodule_to_top_level_rel)
# Ensure the directory exists before attempting to delete it
if os.path.isdir(top_level_submodule_dir):
print(f"Deleting top-level submodule directory: {top_level_submodule_dir}")
if platform.system() == 'Windows':
subprocess.check_output(['cmd.exe', '/c', 'rmdir', '/s', '/q', top_level_submodule_dir])
else:
shutil.rmtree(top_level_submodule_dir)
# Update .gitmodules content for all removed submodules
with open(gitmodules_path, 'r') as f:
content = f.read()
for submodule_path_rel in removed_submodule_paths:
pattern = r'^\[submodule\s+"{}"\](?:(?!^\[submodule\b).)*$'.format(submodule_path_rel)
content = re.sub(pattern, '', content, flags=re.MULTILINE | re.DOTALL)
with open(gitmodules_path, 'w') as f:
print("Updating .gitmodules file in current git repository...")
f.write(content)
subprocess.run(['git', 'add', gitmodules_path])
print("Removed submodule(s) successfully.")
except Exception as e:
print(f"Error: Failed to remove submodule(s): {e}")
sys.exit(1)
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消
提交

简介

QuecPython Project Manager
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/quecpython/qpm.git
git@gitee.com:quecpython/qpm.git
quecpython
qpm
qpm
master
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /