Files
profilarr/backend/app/git/operations/push.py
2025-02-05 16:09:58 +10:30

52 lines
1.7 KiB
Python

# git/operations/push.py
import git
import logging
from .commit import commit_changes
from ..auth.authenticate import check_dev_mode, get_github_token
logger = logging.getLogger(__name__)
def push_changes(repo_path, files, message):
try:
# Check if we're in dev mode
if not check_dev_mode():
logger.warning("Not in dev mode. Push operation not allowed.")
return False, "Push operation not allowed in production mode."
# Get the GitHub token
github_token = get_github_token()
if not github_token:
logger.error("GitHub token not available")
return False, "GitHub token not available"
repo = git.Repo(repo_path)
# Commit changes
commit_success, commit_message = commit_changes(
repo_path, files, message)
if not commit_success:
return False, commit_message
# Authenticate and push changes
with repo.git.custom_environment(GIT_ASKPASS='echo',
GIT_USERNAME=github_token):
origin = repo.remote(name='origin')
push_info = origin.push()
# Check if the push was successful
if push_info[0].flags & push_info[0].ERROR:
raise git.GitCommandError("git push", push_info[0].summary)
return True, "Successfully pushed changes."
except git.GitCommandError as e:
logger.error(f"Git command error pushing changes: {str(e)}",
exc_info=True)
return False, f"Error pushing changes: {str(e)}"
except Exception as e:
logger.error(f"Error pushing changes: {str(e)}", exc_info=True)
return False, f"Error pushing changes: {str(e)}"