erplibre/script/git/git_change_remote_https_to_git.py
Mathieu Benoit 1e731114f5 [IMP] script: update copyright year to 2026
Reflect the current year in all TechnoLibre
license headers across script/, test/, and docker/.

Generated by Claude Code 2.1.74 model claude-sonnet-4-6

Co-Authored-By: Mathieu Benoit <mathben@technolibre.ca>
2026-03-11 23:16:05 -04:00

94 lines
2.4 KiB
Python
Executable file

#!/usr/bin/env python3
# © 2021-2026 TechnoLibre (http://www.technolibre.ca)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
import argparse
import logging
import os
import sys
from git import Repo
new_path = os.path.normpath(
os.path.join(os.path.dirname(__file__), "..", "..")
)
sys.path.append(new_path)
from script.git.git_tool import GitTool
_logger = logging.getLogger(__name__)
def get_config():
"""Parse command line arguments, extracting the config file name,
returning the union of config file and command line arguments
:return: dict of config file settings and command line arguments
"""
# TODO update description
parser = argparse.ArgumentParser(
formatter_class=argparse.RawDescriptionHelpFormatter,
description="""\
""",
epilog="""\
""",
)
parser.add_argument(
"-d",
"--dir",
dest="dir",
default="./",
help="Path of repo to change remote, including submodule.",
)
parser.add_argument(
"-f",
"--upstream",
dest="upstream",
help=(
"Upstream name to change address https to git. "
"When empty, all upstream is updated."
),
)
parser.add_argument(
"--git_to_https",
action="store_true",
help="Replace all repo git to https.",
)
args = parser.parse_args()
return args
def main():
git_tool = GitTool()
config = get_config()
upstream_name = config.upstream
lst_repo = git_tool.get_repo_info(config.dir, add_root=True)
i = 0
total = len(lst_repo)
for repo in lst_repo:
i += 1
print(f"Nb element {i}/{total}")
repo_name = repo.get("name")
relative_path = os.path.join(new_path, repo_name)
if not os.path.isdir(relative_path):
print(f"Ignore repo {relative_path}")
continue
repo_sm = Repo(repo_name)
if upstream_name:
remote_upstream_name = [
a for a in repo_sm.remotes if upstream_name == a.name
]
else:
remote_upstream_name = [a for a in repo_sm.remotes]
for remote in remote_upstream_name:
url, url_https, url_git = git_tool.get_url(remote.url)
new_url = url_https if config.git_to_https else url_git
remote.set_url(new_url)
print(f'Remote "{remote.name}" update for {new_url}')
if __name__ == "__main__":
main()