mirror of
https://github.com/MatthewL246/pretendo-docker.git
synced 2026-03-21 17:34:37 -05:00
Continue adding patches to the index before doing a 3-way merge to avoid the error "file does not match index"
57 lines
2.3 KiB
Bash
Executable File
57 lines
2.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# shellcheck source=./internal/framework.sh
|
|
source "$(dirname "$(realpath "$0")")/internal/framework.sh"
|
|
set_description "This configures, resets the contents of, and applies patches to the submodules in the repos directory."
|
|
add_option "-u --update-remote" "update_remote" "Updates the submodules from their remotes before applying patches. Only \
|
|
use this if you're trying to update the submodules to a newer version than is supported by this project. If a patch \
|
|
fails to apply, a 3-way merge will be attempted."
|
|
parse_arguments "$@"
|
|
|
|
print_info "Resetting all submodules..."
|
|
run_verbose git submodule sync
|
|
run_verbose git submodule foreach "git reset --hard"
|
|
run_verbose git submodule foreach "git clean -fd"
|
|
run_verbose git submodule update --init --checkout
|
|
if [[ -n "$update_remote" ]]; then
|
|
print_info "Updating submodules from their remotes..."
|
|
git submodule update --remote
|
|
fi
|
|
|
|
print_info "Applying patches to submodules..."
|
|
patch_count=0
|
|
error_count=0
|
|
for dir in "$git_base_dir/patches/"*; do
|
|
if [[ -d "$dir" ]]; then
|
|
subdir=$(basename "$dir")
|
|
|
|
cd "$git_base_dir/repos/$subdir"
|
|
|
|
for patch in "$git_base_dir/patches/$subdir"/*; do
|
|
if [[ -n "$update_remote" ]]; then
|
|
print_info "Applying patch $patch..."
|
|
# Without --index, --3way will show the error "file: does not match index"
|
|
if ! git apply --index "$patch"; then
|
|
print_error "Failed to apply patch $patch! Attempting 3-way merge..."
|
|
if ! git apply --3way "$patch"; then
|
|
print_error "There are merge conflicts with the patch that need to be resolved manually."
|
|
else
|
|
print_success "Successfully applied the patch with a 3-way merge. Make sure to re-generate the patch."
|
|
fi
|
|
error_count=$((error_count + 1))
|
|
fi
|
|
else
|
|
if_verbose "Applying patch $patch"
|
|
git apply "$patch"
|
|
fi
|
|
patch_count=$((patch_count + 1))
|
|
done
|
|
fi
|
|
done
|
|
|
|
if [[ "$error_count" -gt 0 ]]; then
|
|
print_error "Failed to apply $error_count patches out of $patch_count."
|
|
exit 1
|
|
fi
|
|
print_success "Successfully applied $patch_count patches."
|