From 9c70fd643f2dc2d1001a526b93edb84f3981d407 Mon Sep 17 00:00:00 2001 From: Florez Ospina Juan Felipe Date: Thu, 28 Mar 2024 19:38:12 +0100 Subject: [PATCH] Refactored code in terms of subprocess for git functionality. --- src/metadata_review_lib.py | 74 +++++++++++++++++++++++++++----------- 1 file changed, 54 insertions(+), 20 deletions(-) diff --git a/src/metadata_review_lib.py b/src/metadata_review_lib.py index c6657ca..4ba095d 100644 --- a/src/metadata_review_lib.py +++ b/src/metadata_review_lib.py @@ -105,7 +105,7 @@ def first_initialize_metadata_review(hdf5_file_path, reviewer_attrs): -def second_submit_metadata_review(filename_path, reviewer_attrs): +def second_submit_metadata_review(review_yaml_file_path, reviewer_attrs): """ Once you're done reviewing the yaml representation of hdf5 file in review folder. Change the review status to complete and save (add and commit) modified .yalm and .txt files in the project by @@ -118,29 +118,63 @@ def second_submit_metadata_review(filename_path, reviewer_attrs): initials = reviewer_attrs['initials'] branch_name = '-'.join([reviewer_attrs['type'],'review','by',initials]) - - if any([status in get_review_status(filename_path) for status in ['under review','submitted']]): - filename_path_tail, filename_path_head = os.path.split(filename_path) - filename, ext = os.path.splitext(filename_path_head) - # TODO: - with open(os.path.join("review/",filename+"-review_status"+TXT_EXT),'a') as f: - f.write('\nsubmitted') - # TODO: replace with subprocess + git checkout_review_branch(repo_obj, branch_name) - status_dict = repo_obj.status() - for filepath, file_status in status_dict.items(): - # Identify keys associated to review files and stage them - if ('review/'+filename in filepath) and (file_status == pygit.GIT_STATUS_WT_MODIFIED): - # Stage changes - repo_obj.index.add(filepath) - author = config_file.author #default_signature - committer = config_file.committer - message = "Submitted metadata review." - tree = repo_obj.index.write_tree() - oid = repo_obj.create_commit('HEAD', author, committer, message, tree, [repo_obj.head.peel().oid]) + #if any([status in get_review_status(filename_path) for status in ['under review','submitted']]): + # filename_path_tail, filename_path_head = os.path.split(filename_path) + # filename, ext = os.path.splitext(filename_path_head) + # # TODO: + + + ## + status_command = ['git','status'] + add_command = lambda add_list: ['git','add'] + add_list + commit_command = lambda message: ['git','commit','-m', message] + #push_command = lambda repository,refspec: ['git','push',repository,refspec] + + status = subprocess.run(status_command,capture_output=True,check=True) + + files_to_add_list = [] + for line in status.stdout.splitlines(): + # conver line from bytes to str + tmp = line.decode("utf-8") + if 'modified' in tmp and review_yaml_file_path in tmp: + files_to_add_list.append(tmp.split()[1]) + ## + + review_yaml_file_path_tail, review_yaml_file_path_head = os.path.split(review_yaml_file_path) + filename, ext = os.path.splitext(review_yaml_file_path_head) + if files_to_add_list: + review_status_file_path = os.path.join("review/",filename+"-review_status"+TXT_EXT) + with open(review_status_file_path,'a') as f: + f.write('\nsubmitted') + + files_to_add_list.append(review_status_file_path) + + result = subprocess.run(add_command(files_to_add_list),capture_output=True,check=True) + message = 'Submitted metadata review.' + commit_output = subprocess.run(commit_command(message),capture_output=True,check=True) + + for line in commit_output.stdout.splitlines(): + print(line.decode('utf-8')) + else: + print('Nothing to commit.') + + + #status_dict = repo_obj.status() + #for filepath, file_status in status_dict.items(): + # Identify keys associated to review files and stage them + # if ('review/'+filename in filepath) and (file_status == pygit.GIT_STATUS_WT_MODIFIED): + # Stage changes + # repo_obj.index.add(filepath) + + #author = config_file.author #default_signature + #committer = config_file.committer + #message = "Submitted metadata review." + #tree = repo_obj.index.write_tree() + #oid = repo_obj.create_commit('HEAD', author, committer, message, tree, [repo_obj.head.peel().oid])