bash scripts
This commit is contained in:
1 parent
7ed4fc67d5
commit
7db38ae9f4
25 files changed
+2375
No files matched your search
@@ -0,0 +1,98 @@
|
||||
#!/bin/bash
|
||||
|
||||
commit1=$1
|
||||
commit2=$2
|
||||
dir=$3
|
||||
patches_dir=$4
|
||||
CHECK=1
|
||||
APPLY=1
|
||||
|
||||
if [ -z "$commit1" ] || [ -z "$commit2" ] || [ -z "$dir" ]; then
|
||||
echo "Usage: $0 <commit1> <commit2> <directory> [patches_dir]"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Default patches directory if not provided
|
||||
if [ -z "$patches_dir" ]; then
|
||||
patches_dir="$(pwd)/patches"
|
||||
elif [[ "$patches_dir" != /* ]]; then
|
||||
patches_dir="$(pwd)/${patches_dir}patches"
|
||||
fi
|
||||
|
||||
if [[ "$commit2" == "HEAD" ]]; then
|
||||
commit2=""
|
||||
fi
|
||||
|
||||
echo "Diffing $dir from $commit1 to ${commit2:-HEAD}..."
|
||||
echo "Patches will be saved in: $patches_dir"
|
||||
|
||||
|
||||
# Save current directory
|
||||
orig_dir="$(pwd)"
|
||||
|
||||
# Get git root directory relative to $dir
|
||||
git_root=$(git -C "$dir" rev-parse --show-toplevel) || { echo "Not a git repo: $dir"; exit 1; }
|
||||
|
||||
# Compute relative path of $dir from git root
|
||||
relative_dir=$(realpath --relative-to="$git_root" "$dir")
|
||||
echo "Relative path of $dir from git root: $relative_dir"
|
||||
|
||||
# Change to git root directory
|
||||
cd "$git_root" || { echo "Failed to cd to git root of $dir"; exit 1; }
|
||||
echo "Go to $git_root"
|
||||
mkdir -p "$patches_dir"
|
||||
|
||||
# Load list of changed files into an array
|
||||
mapfile -t diff_files < <(git diff --name-only $commit1..$commit -- $relative_dir )
|
||||
|
||||
|
||||
for file in "${diff_files[@]}"; do
|
||||
git diff $commit1..$commit2 --stat -- "$file"
|
||||
done
|
||||
|
||||
for file in "${diff_files[@]}"; do
|
||||
echo $file
|
||||
git diff $commit1..$commit2 -- "$file" > "$patches_dir/$(basename "$file").patch"
|
||||
done
|
||||
for patch in "$patches_dir"/*.patch; do
|
||||
echo $patch
|
||||
for patch in "$patches_dir"/*.patch; do
|
||||
sed -i 's|trixel3_software/||g' "$patch"
|
||||
done
|
||||
done
|
||||
|
||||
# Get git root directory relative to $dir
|
||||
git_root_patches_dir=$(git -C "$patches_dir" rev-parse --show-toplevel) || { echo "Not a git repo: $patches_dir"; exit 1; }
|
||||
|
||||
# Compute relative path of $dir from git root
|
||||
relative_dir_patches_dir=$(realpath --relative-to="$git_root_patches_dir" "$patches_dir")
|
||||
echo "Relative path of $patches_dir from git root: $relative_dir_patches_dir"
|
||||
|
||||
# Change to git root directory
|
||||
cd "$git_root_patches_dir" || { echo "Failed to cd to git root of $patches_dir"; exit 1; }
|
||||
echo "Go to $git_root_patches_dir"
|
||||
|
||||
if [[ $CHECK -eq 1 ]]; then
|
||||
# check patches
|
||||
echo "CHECK Patches"
|
||||
for patch in "$patches_dir"/*.patch; do
|
||||
echo $patch
|
||||
git apply --check "$patch"
|
||||
done
|
||||
fi
|
||||
|
||||
if [[ $APPLY -eq 1 ]]; then
|
||||
# apply patches
|
||||
echo "APPLY Patches"
|
||||
for patch in "$patches_dir"/*.patch; do
|
||||
if git apply "$patch"; then
|
||||
echo "Applied $patch successfully."
|
||||
rm "$patch"
|
||||
else
|
||||
echo "Failed to apply $patch. Skipping."
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
# Return to original directory
|
||||
cd "$orig_dir" || exit 1
|
||||
Reference in new issue
Block a user