Source code for solidipes_core_plugin.reports.widgets.git

import os

import streamlit as st
from solidipes.utils import get_git_repository, get_git_root, get_study_metadata, logging
from solidipes.utils.git_infos import GitInfos

################################################################
print = logging.invalidPrint
logger = logging.getLogger()
################################################################


[docs] class GIT: def __init__(self, container=None): # to repair # if self.git_infos.repository is not None: # self._git_info() if container is None: container = st self.container = container self.git_infos = GitInfos() changed_files = self.git_get_changed_files() if changed_files: self.container.button( "Dataset in a modified state: Push Modifications ?", on_click=self.git_push, type="primary", use_container_width=True, ) else: self.container.empty()
[docs] def git_get_changed_files(self): changed_files = [] if self.git_infos.repository: changed_files = [item.a_path for item in self.git_infos.repository.index.diff(None)] return changed_files
[docs] def git_push(self): import subprocess import git save_cwd = os.getcwd() try: os.chdir(get_git_root()) changed_files = self.git_get_changed_files() # changed_files = [os.path.relpath(e, os.getcwd()) for e in changed_files] for e in changed_files: ret = self.git_infos.repository.git.add(e) if ret != "": logger.info(ret) ret = self.git_infos.repository.git.commit('-m "Automatic update from solidipes interface"') if ret != "": logger.info(ret) except git.GitCommandError as err: logger.error(err) os.chdir(save_cwd) return os.chdir(save_cwd) p = subprocess.Popen( "renku dataset update --delete -c --all --no-remote", shell=True, stdout=subprocess.PIPE, ) p.wait() out, err = p.communicate() if not p.returncode == 0: self.global_message.error("renku update failed") if out is not None: self.global_message.error(out.decode()) if err is not None: self.global_message.error(err.decode()) else: logger.info(out.decode()) try: origin = self.git_infos.repository.remotes.origin origin.push("master") except git.GitCommandError as err: logger.error(err) return logger.success("Update repository complete")
# self.clear_session_state()
[docs] def _git_info(self): with self.git_control.container(): changed_files = self.git_get_changed_files() changed_files = [e for e in changed_files if not e.startswith(".solidipes/cloud/")] if changed_files: with st.expander("Modified Files", expanded=False): for p in changed_files: st.markdown(f"- {p}") st.button( "Revert Modifications", type="primary", use_container_width=True, on_click=self.git_revert, )
[docs] def git_revert(self): repo = get_git_repository() ret = repo.git.reset("--hard") logger.info("git revert", ret) logger.info("git revert", type(ret)) logger.info("git revert return", ret) logger.info("git revert", ret) logger.info("git revert", type(ret)) logger.info("git revert return", ret) zenodo_metadata = get_study_metadata() import yaml zenodo_content = yaml.safe_dump(zenodo_metadata) st.session_state["zenodo_metadata_editor"] = zenodo_content logger.info( "st.session_state['zenodo_metadata_editor']", st.session_state["zenodo_metadata_editor"], ) st.session_state["rewrote_zenodo_content"] = True
# self.clear_session_state()