Files
profilarr/backend/app/git/operations/manager.py
Sam Chau ca84a1c95b feature: merge conflict detection and resolution (#6)
- pulls now correctly identify merge conflicts and enter a merge state
- user resolves each file individually
- commit resolve merge state
- allows users to keep custom changes and pull in updates
- improve commit message component
- seperated commit / add functionality
2025-02-05 16:09:58 +10:30

75 lines
2.2 KiB
Python

import git
from .stage import stage_files
from .commit import commit_changes
from .push import push_changes
from .revert import revert_file, revert_all
from .delete import delete_file
from .pull import pull_branch
from .unstage import unstage_files
from .merge import abort_merge, finalize_merge
from .resolve import resolve_conflicts
import os
import logging
logger = logging.getLogger(__name__)
class GitOperations:
def __init__(self, repo_path):
self.repo_path = repo_path
self.configure_git()
def configure_git(self):
try:
repo = git.Repo(self.repo_path)
# Get user info from env variables
git_name = os.environ.get('GITHUB_USER_NAME')
git_email = os.environ.get('GITHUB_USER_EMAIL')
logger.debug(f"Git config - Name: {git_name}, Email: {git_email}"
) # Add this
if git_name and git_email:
with repo.config_writer() as config:
config.set_value('user', 'name', git_name)
config.set_value('user', 'email', git_email)
logger.debug("Git identity configured successfully")
except Exception as e:
logger.error(f"Error configuring git user: {str(e)}")
def stage(self, files):
return stage_files(self.repo_path, files)
def unstage(self, files):
return unstage_files(self.repo_path, files)
def commit(self, files, message):
return commit_changes(self.repo_path, files, message)
def push(self):
return push_changes(self.repo_path)
def revert(self, file_path):
return revert_file(self.repo_path, file_path)
def revert_all(self):
return revert_all(self.repo_path)
def delete(self, file_path):
return delete_file(self.repo_path, file_path)
def pull(self, branch_name):
return pull_branch(self.repo_path, branch_name)
def finalize_merge(self):
repo = git.Repo(self.repo_path)
return finalize_merge(repo)
def abort_merge(self):
return abort_merge(self.repo_path)
def resolve(self, resolutions):
repo = git.Repo(self.repo_path)
return resolve_conflicts(repo, resolutions)