forgecode / .forge /skills /resolve-conflicts /scripts /validate-conflicts.sh
SaylorTwift's picture
SaylorTwift HF Staff
Add files using upload-large-folder tool
c981f27 verified
Raw History Blame Contribute Delete
3.1 kB
#!/bin/bash
# Validates that all Git conflicts have been resolved
# Returns 0 if no conflicts remain, 1 otherwise
set -euo pipefail
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Check if we're in a git repository
if ! git rev-parse --git-dir > /dev/null 2>&1; then
echo -e "${RED}Error: Not a git repository${NC}" >&2
exit 1
fi
# Function to check for conflict markers in files
check_conflict_markers() {
local files_with_markers=()
# Search for conflict markers in tracked files
while IFS= read -r file; do
if [[ -f "$file" ]] && grep -l '^<<<<<<<\|^=======\|^>>>>>>>' "$file" > /dev/null 2>&1; then
files_with_markers+=("$file")
fi
done < <(git diff --name-only --diff-filter=U 2>/dev/null || git ls-files)
if [[ ${#files_with_markers[@]} -gt 0 ]]; then
echo -e "${RED}✗ Found conflict markers in the following files:${NC}"
printf ' %s\n' "${files_with_markers[@]}"
return 1
fi
return 0
}
# Function to check for unmerged paths
check_unmerged_paths() {
local unmerged_files
unmerged_files=$(git diff --name-only --diff-filter=U 2>/dev/null || true)
if [[ -n "$unmerged_files" ]]; then
echo -e "${RED}✗ Found unmerged paths:${NC}"
echo "$unmerged_files" | sed 's/^/ /'
return 1
fi
return 0
}
# Function to check for both deleted and modified status
check_deleted_modified() {
local status
status=$(git status --porcelain 2>/dev/null || true)
# Look for DU (deleted by us) or UD (deleted by them) or DD (both deleted) status
local deleted_modified=$(echo "$status" | grep -E '^(DU|UD|DD|UA|AU|AA)' || true)
if [[ -n "$deleted_modified" ]]; then
echo -e "${YELLOW}⚠ Found files with delete/modify conflicts:${NC}"
echo "$deleted_modified" | sed 's/^/ /'
return 1
fi
return 0
}
# Function to check merge state
check_merge_state() {
if git rev-parse MERGE_HEAD > /dev/null 2>&1; then
echo -e "${YELLOW}⚠ Repository is still in merge state${NC}"
echo " Run 'git merge --continue' after resolving all conflicts"
return 1
fi
if [[ -f .git/MERGE_HEAD ]]; then
echo -e "${YELLOW}⚠ MERGE_HEAD file exists${NC}"
return 1
fi
return 0
}
# Main validation
echo "🔍 Validating conflict resolution..."
echo ""
all_clear=true
if ! check_conflict_markers; then
all_clear=false
fi
if ! check_unmerged_paths; then
all_clear=false
fi
if ! check_deleted_modified; then
all_clear=false
fi
if ! check_merge_state; then
all_clear=false
fi
echo ""
if [[ "$all_clear" == true ]]; then
echo -e "${GREEN}✓ All conflicts resolved successfully!${NC}"
echo ""
echo "Next steps:"
echo " 1. Review changes: git diff --cached"
echo " 2. Run tests to validate"
echo " 3. Commit: git commit"
exit 0
else
echo -e "${RED}✗ Conflicts still exist. Please resolve them before continuing.${NC}"
exit 1
fi