diff --git a/auto_git_update.sh b/auto_git_update.sh index 4998f10..98bd607 100755 --- a/auto_git_update.sh +++ b/auto_git_update.sh @@ -36,20 +36,29 @@ check_wifi() { return $? } -# Function to fetch and clean repo directories from the text file get_repo_dirs() { local valid_dirs=() - local invalid_dirs=() + + echo "Reading directories from $TXT_FILE..." # Debugging line + while IFS= read -r repo_dir; do + # Trim whitespace and skip empty lines + repo_dir=$(echo "$repo_dir" | xargs) + [ -z "$repo_dir" ] && continue + + echo "Processing: '$repo_dir'" # Debugging line to show each line being processed + + # Check if the directory is valid and contains a .git folder if [ -d "$repo_dir" ] && [ -d "$repo_dir/.git" ]; then + echo "Valid Git repository found: '$repo_dir'" # Debugging line valid_dirs+=("$repo_dir") else - invalid_dirs+=("$repo_dir") + echo "Invalid directory or not a Git repository: '$repo_dir'" # Debugging line fi done < "$TXT_FILE" - for dir in "${invalid_dirs[@]}"; do - sed -i "\|$dir|d" "$TXT_FILE" - done + + # Ensure the valid_dirs array contains the expected directories + echo "Valid directories: ${valid_dirs[@]}" # Final debug line showing valid directories echo "${valid_dirs[@]}" } diff --git a/auto_git_update.sh.bak b/auto_git_update.sh.bak index 3506379..45cc0af 100755 --- a/auto_git_update.sh.bak +++ b/auto_git_update.sh.bak @@ -36,106 +36,160 @@ check_wifi() { return $? } -# Function to fetch and clean repo directories from the text file get_repo_dirs() { local valid_dirs=() - local invalid_dirs=() + + echo "Reading directories from $TXT_FILE..." # Debugging line + while IFS= read -r repo_dir; do + # Trim whitespace and skip empty lines + repo_dir=$(echo "$repo_dir" | xargs) + [ -z "$repo_dir" ] && continue + + echo "Processing: '$repo_dir'" # Debugging line to show each line being processed + + # Check if the directory is valid and contains a .git folder if [ -d "$repo_dir" ] && [ -d "$repo_dir/.git" ]; then + echo "Valid Git repository found: '$repo_dir'" # Debugging line valid_dirs+=("$repo_dir") else - invalid_dirs+=("$repo_dir") + echo "Invalid directory or not a Git repository: '$repo_dir'" # Debugging line fi done < "$TXT_FILE" - for dir in "${invalid_dirs[@]}"; do - sed -i "\|$dir|d" "$TXT_FILE" - done + + echo "Valid directories: ${valid_dirs[@]}" # Final debug line showing valid directories echo "${valid_dirs[@]}" } -# Function to create GitHub repo if it doesn't exist +# Function to create GitHub repo if it doesn't exist and push changes create_github_repo() { local repo_name="$1" local repo_dir="$2" - echo "Attempting to create GitHub repo for $repo_name" >> "$REPORT" + echo "Attempting to create GitHub repo for repo $repo_name" >> "$REPORT" # Use GitHub CLI to create the repo if gh repo create "$repo_name" --public --source="$repo_dir" --remote=origin --push; then echo "Successfully created GitHub repository $repo_name" >> "$REPORT" + echo "Repo $repo_name: GHS (GitHub Repo Created Successfully)" >> "$SMS_REPORT" + + # Check if the repository has existing commits + if [ -d "$repo_dir/.git" ] && [ "$(git -C "$repo_dir" rev-parse HEAD)" ]; then + echo "Repository has existing commits. Attempting to add remote and push." >> "$REPORT" + + # Add the GitHub remote if not already added + git remote add origin "git@github.com:kleinpanic/$repo_name.git" 2>/dev/null || true + + # Set the main branch if necessary + git branch -M main + + # Push to GitHub + if git push -u origin main; then + echo "Existing repository pushed successfully to GitHub." >> "$REPORT" + echo "Repo $repo_name: Pushed Successfully" >> "$SMS_REPORT" + else + echo "Failed to push the existing repository to GitHub." >> "$REPORT" + echo "Repo $repo_name: Push Failed" >> "$SMS_REPORT" + fi + fi return 0 else echo "Failed to create GitHub repository $repo_name" >> "$REPORT" + echo "Repo $repo_name: GCF (GitHub Repo Creation Failed)" >> "$SMS_REPORT" return 1 fi } # Function to check if a remote GitHub origin exists check_github_remote() { - git remote -v | grep -q "github.com" + if ! git remote get-url origin &>/dev/null; then + echo "No 'origin' remote found." >> "$REPORT" + return 1 + fi + + local remote_url + remote_url=$(git remote get-url origin) + if [[ "$remote_url" != *github.com* ]]; then + echo "'origin' remote does not point to GitHub." >> "$REPORT" + return 1 + fi + + local repo_name + repo_name=$(basename "$remote_url" .git) + local repo_owner + repo_owner=$(basename "$(dirname "$remote_url")") + local full_repo_name="$repo_owner/$repo_name" + + echo "Checking if GitHub repository '$full_repo_name' exists..." >> "$REPORT" + + if ! gh repo view "$full_repo_name" &>/dev/null; then + echo "GitHub repository '$full_repo_name' does not exist or is not accessible." >> "$REPORT" + return 1 + fi + + return 0 } # Function to update, commit, and push the changes update_repo() { local repo_dir="$1" local repo_number="$2" - cd "$repo_dir" || return + cd "$repo_dir" || return 1 - echo "Processing repository number $repo_number" >> "$REPORT" + echo "Processing repository $repo_number located at $repo_dir" >> "$REPORT" - git fetch origin - if ! git merge origin/main --no-commit --no-ff; then - echo "Merge conflict detected in repo $repo_number" >> "$REPORT" - echo "Repo $repo_number: MC" >> "$SMS_REPORT" - git merge --abort - return 1 + local github_exists=true + if ! check_github_remote; then + echo "No valid GitHub repository found for repo $repo_number." >> "$REPORT" + github_exists=false + + if check_wifi; then + repo_name=$(basename "$repo_dir") + create_github_repo "$repo_name" "$repo_dir" + github_exists=true + fi + fi + + if [ "$github_exists" = true ]; then + git fetch origin &>/dev/null + if ! git merge origin/main --no-commit --no-ff; then + echo "Merge conflict detected in repo $repo_number" >> "$REPORT" + echo "Repo $repo_number: MC" >> "$SMS_REPORT" + git merge --abort + return 1 + fi fi if git diff-index --quiet HEAD --; then echo "No changes detected in repo $repo_number" >> "$REPORT" - echo "Repo $repo_number: NC" >> "$SMS_REPORT" + + if [ "$github_exists" = false ]; then + echo "Repo $repo_number: NC-GDE" >> "$SMS_REPORT" + else + echo "Repo $repo_number: NC-GE" >> "$SMS_REPORT" + fi + return 0 fi git add -A git commit -m "Automated update" + if [ "$github_exists" = false ]; then + echo "No GitHub repository available for repo $repo_number. Committing locally..." >> "$REPORT" + echo "Repo $repo_number: lc-ngr" >> "$SMS_REPORT" + return 0 + fi + if check_wifi; then echo "Internet is available. Attempting to push changes..." >> "$REPORT" - if check_github_remote; then - if ! git push origin main; then - echo "Failed to push changes in repo $repo_number" >> "$REPORT" - echo "Repo $repo_number: PF" >> "$SMS_REPORT" - - # Check if the failure is due to a non-existent repository - if git remote show origin | grep -q "ERROR: Repository not found"; then - echo "Remote GitHub repository missing for repo $repo_number. Attempting to recreate..." >> "$REPORT" - if create_github_repo "$repo_number" "$repo_dir"; then - git push -u origin main - echo "Changes pushed successfully after recreating GitHub repo for repo $repo_number" >> "$REPORT" - echo "Repo $repo_number: P" >> "$SMS_REPORT" - else - echo "Failed to create GitHub repository for repo $repo_number" >> "$REPORT" - echo "Repo $repo_number: GCF" >> "$SMS_REPORT" - return 1 - fi - else - return 1 - fi - else - echo "Changes pushed successfully in repo $repo_number" >> "$REPORT" - echo "Repo $repo_number: P" >> "$SMS_REPORT" - fi + if ! git push origin main; then + echo "Failed to push changes in repo $repo_number" >> "$REPORT" + echo "Repo $repo_number: PF" >> "$SMS_REPORT" + return 1 else - if create_github_repo "$repo_number" "$repo_dir"; then - git push -u origin main - echo "Changes pushed successfully after creating GitHub repo in repo $repo_number" >> "$REPORT" - echo "Repo $repo_number: P" >> "$SMS_REPORT" - else - echo "Failed to create GitHub repository for repo $repo_number" >> "$REPORT" - echo "Repo $repo_number: GCF" >> "$SMS_REPORT" - return 1 - fi + echo "Changes pushed successfully in repo $repo_number" >> "$REPORT" + echo "Repo $repo_number: P" >> "$SMS_REPORT" fi else echo "No internet connection. Changes committed locally in repo $repo_number" >> "$REPORT" @@ -148,7 +202,7 @@ echo "Starting auto git update script on $(date)" > "$REPORT" echo "(G-R), $(date)" > "$SMS_REPORT" # Fetch valid repositories -repo_dirs=($(get_repo_dirs)) # Convert to array properly +repo_dirs=($(get_repo_dirs)) # Counters for SMS summary report pushed_count=0 @@ -156,6 +210,8 @@ no_change_count=0 local_commit_count=0 conflict_count=0 error_count=0 +created_count=0 +no_github_repo_count=0 total_repos=${#repo_dirs[@]} # Loop through each valid directory @@ -164,10 +220,12 @@ for repo_dir in "${repo_dirs[@]}"; do update_repo "$repo_dir" "$repo_number" case "$(tail -n 1 "$SMS_REPORT")" in *P) pushed_count=$((pushed_count + 1)) ;; - *NC) no_change_count=$((no_change_count + 1)) ;; + *NC*) no_change_count=$((no_change_count + 1)) ;; *LC) local_commit_count=$((local_commit_count + 1)) ;; *MC) conflict_count=$((conflict_count + 1)) ;; *PF) error_count=$((error_count + 1)) ;; + *lc-ngr*) no_github_repo_count=$((no_github_repo_count + 1)) ;; + *GHS) created_count=$((created_count + 1)) ;; esac repo_number=$((repo_number + 1)) done @@ -175,11 +233,10 @@ done # Check if the detailed SMS report exceeds the SMS character limit sms_detailed_content=$(cat "$SMS_REPORT") if [ "${#sms_detailed_content}" -gt "$SMS_CHAR_LIMIT" ]; then - sms_summary="Pushed: $pushed_count/$total_repos, No Change: $no_change_count/$total_repos, Locally Committed: $local_commit_count/$total_repos, Conflicts: $conflict_count/$total_repos, Errors: $error_count/$total_repos" + sms_summary="Pushed: $pushed_count/$total_repos, No Change: $no_change_count/$total_repos, Locally Committed: $local_commit_count/$total_repos, Conflicts: $conflict_count/$total_repos, Errors: $error_count/$total_repos, No GitHub Repo: $no_github_repo_count/$total_repos, Created: $created_count/$total_repos" echo "$sms_summary" > "$SMS_REPORT" fi -# Function to send the SMS report send_text() { /usr/bin/msmtp -a default -t <