Skip to content
Snippets Groups Projects
Commit 05469c90 authored by Ronald Jäpel's avatar Ronald Jäpel
Browse files

Add ability to convert existing git repos to cadet-rdm repos

parent 3b55aa13
No related branches found
No related tags found
No related merge requests found
......@@ -15,7 +15,7 @@ def add_linebreaks(input_list):
"""
Add linebreaks between each entry in the input_list
"""
return [line + "\n" for line in input_list]
return ["\n" + line for line in input_list]
def init_lfs(lfs_filetypes: list, path: str = None):
......@@ -102,17 +102,21 @@ def initialize_git_repo(path_to_repo: str, output_repo_name: (str | bool) = "out
starting_directory = os.getcwd()
if path_to_repo != ".":
if os.path.exists(path_to_repo) and len(os.listdir(path_to_repo)) > 0:
raise ValueError("Path to repository already exists and is not an empty directory.")
os.makedirs(path_to_repo, exist_ok=True)
os.chdir(path_to_repo)
os.system(f"git init")
try:
repo = git.Repo(".")
proceed = input(f'The target directory already contains a git repo.\n'
f'Please back up or push all changes to the repo before continuing.'
f'Proceed? Y/n \n')
if not (proceed.lower() == "y" or proceed == ""):
raise KeyboardInterrupt
except git.exc.InvalidGitRepositoryError:
os.system(f"git init")
init_lfs(lfs_filetypes)
write_lines_to_file(path=".gitattributes", lines=gitattributes)
write_lines_to_file(path=".gitignore", lines=gitignore)
write_lines_to_file(path=".gitattributes", lines=gitattributes, open_type="a")
write_lines_to_file(path=".gitignore", lines=gitignore, open_type="a")
if output_repo_kwargs is None:
output_repo_kwargs = {"gitattributes": ["logs/log.csv merge=union"]}
......@@ -125,8 +129,11 @@ def initialize_git_repo(path_to_repo: str, output_repo_name: (str | bool) = "out
# This instance of ProjectRepo is therefore the project repo
repo = ProjectRepo(".", output_folder=output_repo_name)
else:
create_output_readme()
# If output_repo_name is False we are in the output_repo and should finish by committing the changes
init_lfs(lfs_filetypes)
create_output_readme()
repo = ResultsRepo(".")
repo.commit("initial commit")
......@@ -147,7 +154,7 @@ def create_readme():
"Please update the environment.yml with your python environment requirements.", "", "",
"The output repository can be found at:",
"[output_repo]() (not actually set yet because no remote has been configured at this moment"]
write_lines_to_file("README.md", readme_lines, open_type="w")
write_lines_to_file("README.md", readme_lines, open_type="a")
def create_output_readme():
......@@ -155,7 +162,7 @@ def create_output_readme():
"- authors", "- project", "- things we will find interesting later", "", "",
"The project repository can be found at:",
"[project_repo]() (not actually set yet because no remote has been configured at this moment"]
write_lines_to_file("README.md", readme_lines, open_type="w")
write_lines_to_file("README.md", readme_lines, open_type="a")
def initialize_from_remote(project_url, path_to_repo: str = None):
......
......@@ -677,6 +677,12 @@ class ProjectRepo(BaseRepo):
if os.path.exists(self.output_repo.working_dir + "_cached"):
shutil.rmtree(self.output_repo.working_dir + "_cached")
def test_for_correct_repo_setup(self):
"""
ToDo: implement
:return:
"""
def enter_context(self, ):
"""
Enter the tracking context. This includes:
......@@ -688,6 +694,7 @@ class ProjectRepo(BaseRepo):
:return:
The name of the newly created output branch.
"""
self.test_for_correct_repo_setup()
self.test_for_uncommitted_changes()
self._on_context_enter_commit_hash = self.current_commit_hash
self._is_in_context_manager = True
......
......@@ -154,6 +154,25 @@ def try_initialize_from_remote():
assert try_init_gitpython_repo("test_repo_from_remote")
def test_init_over_existing_repo():
path_to_repo = "test_repo_2"
if os.path.exists(path_to_repo):
remove_dir(path_to_repo)
os.makedirs(path_to_repo)
os.chdir(path_to_repo)
os.system(f"git init")
with open("README.md", "w") as handle:
handle.write("Readme-line 1\n")
with open(".gitignore", "w") as handle:
handle.write("foo.bar.*")
repo = git.Repo(".")
repo.git.add(".")
repo.git.commit("-m", "Initial commit")
os.chdir("..")
initialize_git_repo(path_to_repo)
def test_cadet_rdm(path_to_repo):
# because these depend on one-another and there is no native support afaik for sequential tests
# these tests are called sequentially here as try_ functions.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment