From ea1e22d3e4b8a21fdf2c177534d7b30a7df7eea8 Mon Sep 17 00:00:00 2001 From: Jali Date: Sat, 20 Sep 2025 23:34:37 +0200 Subject: [PATCH] Modify the monitor to listen to multiple repositories. --- services/git-monitor | 47 +++++++++++++++++++++++++++----------------- 1 file changed, 29 insertions(+), 18 deletions(-) diff --git a/services/git-monitor b/services/git-monitor index 36cae64..71dc169 100644 --- a/services/git-monitor +++ b/services/git-monitor @@ -1,8 +1,8 @@ #!/bin/bash # Configuration (Customize these!) -REPO_URL="ssh://gitea@git.orca-central.de:10229/jali/PDP10Sudoku.git" -REPO_LOCAL_PATH="/home/jali/Projects/PDP10Sudoku" +REPO_URLS="/opt/src/repository.list" +REPO_LOCAL_PATH="/opt/src" BRANCH_NAME="develop" POLL_INTERVAL=60 # Seconds between checks #LOG_FILE="/var/log/git-monitor.log" # Log file for recording actions @@ -32,41 +32,49 @@ remove_lock() { rm -f "$LOCK_FILE" } -initialize_repo() { - if [ ! -d "$REPO_LOCAL_PATH" ]; then - log_message "INFO" "Repository directory does not exist. Cloning..." - mkdir -p "$REPO_LOCAL_PATH" - git clone --depth 1 "$REPO_URL" "$REPO_LOCAL_PATH" - if [ $? -ne 0 ]; then - log_message "ERROR" "Failed to clone repository. Exiting." - exit 1 +run_after() { + local after_pull_script=$1 + source $after_pull_script +} + +initialize_repos() { + while IFS=: read -r REPO_NAME REPO_URL; do + if [ ! -d "$REPO_LOCAL_PATH/$REPO_NAME" ]; then + log_message "INFO" "Repository directory does not exist. Cloning..." + mkdir -p "$REPO_LOCAL_PATH" + git clone --depth 1 "$REPO_URL" "$REPO_LOCAL_PATH/$REPO_NAME" + if [ $? -ne 0 ]; then + log_message "ERROR" "Failed to clone repository. Exiting." + exit 1 + fi + log_message "INFO" "Repository cloned successfully." fi - log_message "INFO" "Repository cloned successfully." - fi + done <$REPO_URLS } check_for_updates() { + local repo_name=$1 local last_commit_hash local current_commit_hash # Get the last known commit hash (from a file) - if [ -f "$REPO_LOCAL_PATH/.git-monitor-last-commit" ]; then - last_commit_hash=$(cat "$REPO_LOCAL_PATH/.git-monitor-last-commit") + if [ -f "$REPO_LOCAL_PATH/$repo_name/.git-monitor-last-commit" ]; then + last_commit_hash=$(cat "$REPO_LOCAL_PATH/$repo_name/.git-monitor-last-commit") else last_commit_hash="" # Initialize if file doesn't exist fi # Fetch the latest commit hash from the remote repository - current_commit_hash=$(git -C "$REPO_LOCAL_PATH" branch --format '%(sha)') + current_commit_hash=$(git -C "$REPO_LOCAL_PATH/$repo_name" branch --format '%(sha)') if [ -z "$last_commit_hash" ] || [ "$current_commit_hash" != "$last_commit_hash" ]; then log_message "INFO" "New commits detected. Pulling..." - git -C "$REPO_LOCAL_PATH" pull origin "$BRANCH_NAME" + git -C "$REPO_LOCAL_PATH/$repo_name" pull origin "$BRANCH_NAME" if [ $? -eq 0 ]; then log_message "INFO" "Pull successful." # Update the last commit hash file - echo "$current_commit_hash" > "$REPO_LOCAL_PATH/.git-monitor-last-commit" + echo "$current_commit_hash" > "$REPO_LOCAL_PATH/$repo_name/.git-monitor-last-commit" else log_message "ERROR" "Pull failed." fi @@ -82,7 +90,10 @@ log_message "INFO" "Git monitor started." initialize_repo while true; do - check_for_updates + while IFS=: read -r $REPO_NAME $REPO_URL; do + check_for_updates $REPO_NAME + run_after "$REPO_LOCAL_PATH/$REPO_NAME/.git-monitor_after.sh" + done < $REPO_URLS sleep "$POLL_INTERVAL" done