mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
140 lines
3.8 KiB
Bash
140 lines
3.8 KiB
Bash
#!/bin/bash
|
|
|
|
# Script to resolve searchindex.js conflicts by accepting master branch version
|
|
# This script is designed to handle merge conflicts that occur when PRs become
|
|
# desynchronized due to the auto-generated searchindex.js file.
|
|
#
|
|
# The searchindex.js file is automatically generated by the build process and
|
|
# frequently causes conflicts when multiple PRs are waiting to be merged.
|
|
# This script automatically resolves those conflicts by accepting the master
|
|
# branch version of the file.
|
|
#
|
|
# Usage: resolve_searchindex_conflicts.sh <pr_number> <head_branch> <base_branch>
|
|
|
|
set -euo pipefail
|
|
|
|
# Validate arguments
|
|
if [ $# -ne 3 ]; then
|
|
echo "Usage: $0 <pr_number> <head_branch> <base_branch>"
|
|
exit 1
|
|
fi
|
|
|
|
PR_NUMBER="$1"
|
|
HEAD_BRANCH="$2"
|
|
BASE_BRANCH="$3"
|
|
|
|
# Validate required environment variables
|
|
if [ -z "${GITHUB_REPOSITORY:-}" ]; then
|
|
echo "Error: GITHUB_REPOSITORY environment variable is required"
|
|
exit 1
|
|
fi
|
|
|
|
if [ -z "${GH_TOKEN:-}" ]; then
|
|
echo "Error: GH_TOKEN environment variable is required"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Resolving conflicts for PR #$PR_NUMBER (branch: $HEAD_BRANCH -> $BASE_BRANCH)"
|
|
|
|
# Get current directory for safety
|
|
ORIGINAL_DIR=$(pwd)
|
|
|
|
# Create a temporary directory for the operation
|
|
TEMP_DIR=$(mktemp -d)
|
|
echo "Working in temporary directory: $TEMP_DIR"
|
|
|
|
cleanup() {
|
|
echo "Cleaning up..."
|
|
cd "$ORIGINAL_DIR"
|
|
rm -rf "$TEMP_DIR"
|
|
}
|
|
trap cleanup EXIT
|
|
|
|
# Clone the repository to the temp directory
|
|
echo "Cloning repository..."
|
|
cd "$TEMP_DIR"
|
|
gh repo clone "$GITHUB_REPOSITORY" . -- --branch "$HEAD_BRANCH"
|
|
|
|
# Configure git
|
|
git config user.email "action@github.com"
|
|
git config user.name "GitHub Action"
|
|
|
|
# Fetch all branches
|
|
git fetch origin
|
|
|
|
# Make sure we're on the correct branch
|
|
git checkout "$HEAD_BRANCH"
|
|
|
|
# Try to merge the base branch
|
|
echo "Attempting to merge $BASE_BRANCH into $HEAD_BRANCH..."
|
|
if git merge "origin/$BASE_BRANCH" --no-edit; then
|
|
echo "No conflicts found, merge successful"
|
|
|
|
# Push the updated branch
|
|
echo "Pushing merged branch..."
|
|
git push origin "$HEAD_BRANCH"
|
|
exit 0
|
|
fi
|
|
|
|
# Check what files have conflicts
|
|
echo "Checking for conflicts..."
|
|
conflicted_files=$(git diff --name-only --diff-filter=U)
|
|
echo "Conflicted files: $conflicted_files"
|
|
|
|
# Check if searchindex.js is the only conflict or if conflicts are only in acceptable files
|
|
acceptable_conflicts=true
|
|
searchindex_conflict=false
|
|
|
|
for file in $conflicted_files; do
|
|
case "$file" in
|
|
"searchindex.js")
|
|
searchindex_conflict=true
|
|
echo "Found searchindex.js conflict (acceptable)"
|
|
;;
|
|
*)
|
|
echo "Found unacceptable conflict in: $file"
|
|
acceptable_conflicts=false
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [ "$acceptable_conflicts" = false ]; then
|
|
echo "Cannot auto-resolve: conflicts found in files other than searchindex.js"
|
|
git merge --abort
|
|
exit 1
|
|
fi
|
|
|
|
if [ "$searchindex_conflict" = false ]; then
|
|
echo "No searchindex.js conflicts found, but merge failed for unknown reason"
|
|
git merge --abort
|
|
exit 1
|
|
fi
|
|
|
|
echo "Resolving searchindex.js conflict by accepting $BASE_BRANCH version..."
|
|
|
|
# Accept the base branch version of searchindex.js (--theirs refers to the branch being merged in)
|
|
git checkout --theirs searchindex.js
|
|
git add searchindex.js
|
|
|
|
# Check if there are any other staged changes from the merge
|
|
staged_files=$(git diff --cached --name-only || true)
|
|
echo "Staged files after resolution: $staged_files"
|
|
|
|
# Complete the merge
|
|
if git commit --no-edit; then
|
|
echo "Successfully resolved merge conflicts"
|
|
|
|
# Push the updated branch
|
|
echo "Pushing resolved branch..."
|
|
if git push origin "$HEAD_BRANCH"; then
|
|
echo "Successfully pushed resolved branch"
|
|
exit 0
|
|
else
|
|
echo "Failed to push resolved branch"
|
|
exit 1
|
|
fi
|
|
else
|
|
echo "Failed to commit merge resolution"
|
|
exit 1
|
|
fi
|