erplibre/script/fork_project_ERPLibre.py

132 lines
5.1 KiB
Python

#!/usr/bin/env python
import os
import sys
import argparse
import logging
from git import Repo
import git
new_path = os.path.normpath(os.path.join(os.path.dirname(__file__), '..'))
sys.path.append(new_path)
from script.git_tool import GitTool
_logger = logging.getLogger(__name__)
CST_GITHUB_TOKEN = "GITHUB_TOKEN"
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
"""
config = GitTool.get_project_config()
# 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('--organization', dest="organization", default="ERPLibre",
help="Choose organization to fork and change all repo.")
parser.add_argument("--skip_fork", action="store_true",
help="Ignore fork to generate only dependancies like "
".gitmodules and odoo_install_locally.sh")
parser.add_argument('-f', "--force", action="store_true",
help="Force rewrite remote.")
parser.add_argument('--github_token', dest="github_token",
default=config.get(CST_GITHUB_TOKEN),
help="GitHub token generated by user")
args = parser.parse_args()
return args
def main():
config = get_config()
github_token = config.github_token
git_tool = GitTool()
root_repo = Repo(config.dir)
if not github_token:
raise ValueError("Missing github_token")
organization_name = config.organization
lst_repo = git_tool.get_source_repo_addons(repo_path=config.dir, add_repo_root=True)
lst_repo_organization = [git_tool.get_transformed_repo_info_from_url(
a.get("url"), repo_path=config.dir, organization_force=organization_name,
is_submodule=a.get("is_submodule"), sub_path=a.get("sub_path"))
for a in lst_repo]
i = 0
total = len(lst_repo)
# for repo in lst_repo:
# i += 1
# print(f"Nb element {i}/{total}")
# url = repo.get("url")
#
# try:
# working_repo = Repo(repo.get("relative_path"))
# except git.exc.NoSuchPathError:
# # Check to fork
# # repo_info = git_tool.get_transformed_repo_info_from_url(
# # url, organization_force="ERPLibre",
# # is_submodule=repo.get("is_submodule"),
# # sub_path=repo.get("sub_path"))
# git_tool.fork_repo(upstream_url=url,
# github_token=github_token,
# organization_name="ERPLibre")
# repo_info = git_tool.get_transformed_repo_info_from_url(
# url, organization_force=organization_name,
# is_submodule=repo.get("is_submodule"), sub_path=repo.get("sub_path"))
# git_tool.fork_repo(upstream_url=url,
# github_token=github_token,
# organization_name=organization_name)
#
# git_tool.add_and_fetch_remote(repo_info, root_repo=root_repo)
# continue
#
# dct_remote_name = {a.name: a for a in working_repo.remotes}
# remote_origin = dct_remote_name.get("origin")
# remote_erplibre = dct_remote_name.get("ERPLibre")
# remote_organization = dct_remote_name.get(organization_name)
#
# if not config.skip_fork:
# if not remote_erplibre:
# repo_info = git_tool.get_transformed_repo_info_from_url(
# url, organization_force="ERPLibre",
# is_submodule=repo.get("is_submodule"),
# sub_path=repo.get("sub_path"))
# git_tool.add_and_fetch_remote(repo_info)
#
# git_tool.fork_repo(url, github_token,
# organization_name=organization_name,
# )
#
# repo_info = git_tool.get_transformed_repo_info_from_url(
# url, organization_force=organization_name,
# is_submodule=repo.get("is_submodule"), sub_path=repo.get("sub_path"))
# if remote_origin:
# working_repo.git.remote("remove", "origin")
# repo_info.organization = "origin"
# try:
# git_tool.add_and_fetch_remote(repo_info, root_repo=root_repo)
# except Exception as e:
# print(e)
# if config.force and remote_organization:
# working_repo.git.remote("remove", organization_name)
#
# repo_info.organization = organization_name
# git_tool.add_and_fetch_remote(repo_info)
# Update origin to new repo
git_tool.generate_git_modules(lst_repo_organization, repo_path=config.dir)
git_tool.generate_odoo_install_locally()
if __name__ == '__main__':
main()