fix: improve backup script error handling

- Check if directory is a git repository before proceeding
- Add fallback for git switch (use checkout if switch fails)
- Handle offline/no-origin scenarios gracefully
- Use local HEAD instead of origin/main for comparison
- Add error handling for push operations
- Continue backup locally if remote push fails
This commit is contained in:
saravanakumardb1 2026-02-12 20:02:21 -08:00
parent ae2e757fb2
commit f2a5dcecda

View File

@ -20,16 +20,26 @@ backup_repo() {
cd "$repo_path"
# Check if this is a git repository
if ! git rev-parse --git-dir > /dev/null 2>&1; then
echo -e "${RED}$repo_name: Not a git repository!${NC}"
cd ..
return 1
fi
# Ensure we're on main
CURRENT_BRANCH=$(git branch --show-current)
CURRENT_BRANCH=$(git branch --show-current 2>/dev/null || echo "")
if [ "$CURRENT_BRANCH" != "main" ]; then
echo "Switching to main branch..."
git switch main
git switch main 2>/dev/null || git checkout main
fi
# Pull latest changes
echo "Pulling latest changes..."
git pull origin main
if ! git pull origin main 2>/dev/null; then
echo -e "${YELLOW}⚠️ Could not pull latest changes (might be offline or no origin/main)${NC}"
# Continue anyway with local state
fi
# Check if working directory is clean
if [ -n "$(git status --porcelain)" ]; then
@ -43,10 +53,10 @@ backup_repo() {
LATEST_BACKUP=$(git branch -r --sort=-committerdate 2>/dev/null | grep "origin/backup/main-" | head -1 | cut -d'/' -f2 || true)
if [ -n "$LATEST_BACKUP" ]; then
MAIN_COMMIT=$(git rev-parse origin/main)
BACKUP_COMMIT=$(git rev-parse origin/$LATEST_BACKUP 2>/dev/null || true)
MAIN_COMMIT=$(git rev-parse HEAD 2>/dev/null || echo "")
BACKUP_COMMIT=$(git rev-parse origin/$LATEST_BACKUP 2>/dev/null || echo "")
if [ "$MAIN_COMMIT" = "$BACKUP_COMMIT" ]; then
if [ -n "$MAIN_COMMIT" ] && [ "$MAIN_COMMIT" = "$BACKUP_COMMIT" ]; then
echo -e "${GREEN}$repo_name: Already backed up in $LATEST_BACKUP${NC}"
cd ..
return 0
@ -58,7 +68,14 @@ backup_repo() {
echo "Creating backup branch: $BACKUP_BRANCH"
git checkout -b $BACKUP_BRANCH
git push -u origin $BACKUP_BRANCH
# Try to push, but continue even if it fails
if git push -u origin $BACKUP_BRANCH 2>/dev/null; then
echo -e "${GREEN}✅ Backup pushed to remote${NC}"
else
echo -e "${YELLOW}⚠️ Could not push backup to remote (backup exists locally only)${NC}"
fi
git checkout main
echo -e "${GREEN}$repo_name: Backup created successfully${NC}"