UserSyncUI / backend /services /git_sync.py
AUXteam's picture
Fix: bypass strict git clone check to prevent startup log errors
b7a0f4f verified
import os
import subprocess
import logging
logger = logging.getLogger(__name__)
class GitSyncService:
def __init__(self, repo_url: str, local_dir: str = "/app/personas", branch: str = "main"):
self.repo_url = repo_url
self.local_dir = local_dir
self.branch = branch
def startup_pull(self):
"""Pulls from the github repository into /app/personas"""
if not os.path.exists(self.local_dir):
os.makedirs(self.local_dir, exist_ok=True)
logger.info(f"Cloning {self.repo_url} into {self.local_dir}...")
try:
subprocess.run(["git", "clone", "--depth", "1", "-b", self.branch, self.repo_url, self.local_dir], check=False, capture_output=True, text=True)
except subprocess.CalledProcessError as e:
logger.error(f"Error cloning repository: {e.stderr}")
else:
logger.info(f"Pulling updates in {self.local_dir}...")
try:
subprocess.run(["git", "-C", self.local_dir, "pull", "origin", self.branch], check=True, capture_output=True, text=True)
except subprocess.CalledProcessError as e:
logger.error(f"Error pulling repository: {e.stderr}")
def background_push(self, commit_message: str = "Update personas"):
"""Pushes any new generated JSON personas to github."""
try:
# Need to figure out the right auth path if pushing to github. For now assume configured.
subprocess.run(["git", "-C", self.local_dir, "add", "."], check=True, capture_output=True, text=True)
# Check if there are changes to commit
status = subprocess.run(["git", "-C", self.local_dir, "status", "--porcelain"], capture_output=True, text=True)
if not status.stdout.strip():
logger.info("No changes to push.")
return
subprocess.run(["git", "-C", self.local_dir, "commit", "-m", commit_message], check=True, capture_output=True, text=True)
subprocess.run(["git", "-C", self.local_dir, "push", "origin", self.branch], check=True, capture_output=True, text=True)
logger.info(f"Successfully pushed changes to {self.branch}")
except subprocess.CalledProcessError as e:
logger.error(f"Error pushing to repository: {e.stderr}")
git_sync = GitSyncService("https://github.com/JsonLord/agent-notes.git", "/app/personas")