69 lines
2.0 KiB
Bash
Executable File
69 lines
2.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
ODF_BRANCH="${1:-main}"
|
|
UPSTREAM_BRANCH="${2:-upstream/master}"
|
|
|
|
git rev-parse --git-dir >/dev/null 2>&1 || {
|
|
echo "ERROR: not inside a Git repository" >&2
|
|
exit 1
|
|
}
|
|
|
|
git rev-parse --verify "$ODF_BRANCH" >/dev/null
|
|
git rev-parse --verify "$UPSTREAM_BRANCH" >/dev/null
|
|
|
|
BASE="$(git merge-base "$ODF_BRANCH" "$UPSTREAM_BRANCH")"
|
|
ODF_HEAD="$(git rev-parse "$ODF_BRANCH")"
|
|
UPSTREAM_HEAD="$(git rev-parse "$UPSTREAM_BRANCH")"
|
|
|
|
TMPDIR_WORK="$(mktemp -d)"
|
|
trap 'rm -rf "$TMPDIR_WORK"' EXIT
|
|
|
|
ODF_FILES="$TMPDIR_WORK/odfstudio-files.txt"
|
|
UPSTREAM_FILES="$TMPDIR_WORK/upstream-files.txt"
|
|
SHARED_FILES="$TMPDIR_WORK/shared-files.txt"
|
|
|
|
git diff --name-only "$BASE".."$ODF_BRANCH" | sort -u > "$ODF_FILES"
|
|
git diff --name-only "$BASE".."$UPSTREAM_BRANCH" | sort -u > "$UPSTREAM_FILES"
|
|
|
|
comm -12 "$ODF_FILES" "$UPSTREAM_FILES" > "$SHARED_FILES"
|
|
|
|
ODF_COMMITS="$(git rev-list --count "$UPSTREAM_BRANCH".."$ODF_BRANCH")"
|
|
UPSTREAM_COMMITS="$(git rev-list --count "$ODF_BRANCH".."$UPSTREAM_BRANCH")"
|
|
|
|
ODF_FILE_COUNT="$(wc -l < "$ODF_FILES")"
|
|
UPSTREAM_FILE_COUNT="$(wc -l < "$UPSTREAM_FILES")"
|
|
SHARED_FILE_COUNT="$(wc -l < "$SHARED_FILES")"
|
|
|
|
echo "ODFStudio upstream synchronization report"
|
|
echo "========================================="
|
|
echo
|
|
printf "BASE %s\n" "$BASE"
|
|
printf "ODFStudio %s (%s)\n" "$ODF_HEAD" "$ODF_BRANCH"
|
|
printf "Upstream %s (%s)\n" "$UPSTREAM_HEAD" "$UPSTREAM_BRANCH"
|
|
|
|
echo
|
|
echo "Commits"
|
|
printf " ODFStudio %8d\n" "$ODF_COMMITS"
|
|
printf " Upstream %8d\n" "$UPSTREAM_COMMITS"
|
|
|
|
echo
|
|
echo "Modified files since common base"
|
|
printf " ODFStudio %8d\n" "$ODF_FILE_COUNT"
|
|
printf " Upstream %8d\n" "$UPSTREAM_FILE_COUNT"
|
|
printf " Shared %8d\n" "$SHARED_FILE_COUNT"
|
|
|
|
echo
|
|
echo "Upstream activity on shared files"
|
|
echo "---------------------------------"
|
|
|
|
if [[ ! -s "$SHARED_FILES" ]]; then
|
|
echo "No shared modified files."
|
|
exit 0
|
|
fi
|
|
|
|
while IFS= read -r file; do
|
|
count="$(git rev-list --count "$BASE".."$UPSTREAM_BRANCH" -- "$file")"
|
|
printf "%5d %s\n" "$count" "$file"
|
|
done < "$SHARED_FILES" | sort -nr
|