mirror of
https://github.com/jpetazzo/container.training.git
synced 2026-02-14 17:49:59 +00:00
🛠️ Add script to find unmerged changes
This commit is contained in:
60
slides/find-unmerged-changes.sh
Executable file
60
slides/find-unmerged-changes.sh
Executable file
@@ -0,0 +1,60 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# The materials for a given training live in their own branch.
|
||||||
|
# Sometimes, we write custom content (or simply new content) for a training,
|
||||||
|
# and that content doesn't get merged back to main. This script tries to
|
||||||
|
# detect that with the following heuristics:
|
||||||
|
# - list all remote branches
|
||||||
|
# - for each remote branch, list the changes that weren't merged into main
|
||||||
|
# (using "diff main...$BRANCH", three dots)
|
||||||
|
# - ignore a bunch of training-specific files that change all the time anyway
|
||||||
|
# - for the remaining files, compute the diff between main and the branch
|
||||||
|
# (using "diff main..$BRANCH", two dots)
|
||||||
|
# - ignore changes of less than 10 lines
|
||||||
|
# - also ignore a few red herrings
|
||||||
|
# - display whatever is left
|
||||||
|
|
||||||
|
# For "git diff" (in the filter function) to work correctly, we must be
|
||||||
|
# at the root of the repo.
|
||||||
|
cd $(git rev-parse --show-toplevel)
|
||||||
|
|
||||||
|
BRANCHES=$(git branch -r | grep -v origin/HEAD | grep origin/2)
|
||||||
|
|
||||||
|
filter() {
|
||||||
|
threshold=10
|
||||||
|
while read filename; do
|
||||||
|
case $filename in
|
||||||
|
# Generic training-specific files
|
||||||
|
slides/*.html) continue;;
|
||||||
|
slides/*.yml) continue;;
|
||||||
|
slides/logistics*.md) continue;;
|
||||||
|
# Specific content that can be ignored
|
||||||
|
#slides/containers/Local_Environment.md) threshold=100;;
|
||||||
|
# Content that was moved/refactored enough to confuse us
|
||||||
|
slides/containers/Local_Environment.md) threshold=100;;
|
||||||
|
slides/exercises.md) continue;;
|
||||||
|
slides/k8s/batch-jobs) threshold=20;;
|
||||||
|
# Renames
|
||||||
|
*/{*}*) continue;;
|
||||||
|
esac
|
||||||
|
git diff --find-renames --numstat main..$BRANCH -- "$filename" | {
|
||||||
|
# If the files are identical, the diff will be empty, and "read" will fail.
|
||||||
|
read plus minus filename || return
|
||||||
|
# Ignore binary files (FIXME though?)
|
||||||
|
if [ $plus = - ]; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
diff=$((plus-minus))
|
||||||
|
if [ $diff -gt $threshold ]; then
|
||||||
|
echo git diff main..$BRANCH -- $filename
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
for BRANCH in $BRANCHES; do
|
||||||
|
if FILES=$(git diff --find-renames --name-only main...$BRANCH | filter | grep .); then
|
||||||
|
echo "🌳 $BRANCH:"
|
||||||
|
echo "$FILES"
|
||||||
|
fi
|
||||||
|
done
|
||||||
Reference in New Issue
Block a user