mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-21 15:12:02 +00:00
simple backport script
This commit is contained in:
parent
7974fcb9d7
commit
d0eb40e4ca
@ -3,12 +3,29 @@ set -e
|
|||||||
|
|
||||||
branch="$1"
|
branch="$1"
|
||||||
merge_base=$(git merge-base origin/master "origin/$branch")
|
merge_base=$(git merge-base origin/master "origin/$branch")
|
||||||
|
master_git_cmd=(git log "$merge_base..origin/master" --first-parent)
|
||||||
|
branch_git_cmd=(git log "$merge_base..origin/$branch" --first-parent)
|
||||||
|
|
||||||
# Make lists of PRs that were merged into each branch. Use first parent here, or else
|
# Make lists of PRs that were merged into each branch. Use first parent here, or else
|
||||||
# we'll get weird things like seeing older master that was merged into a PR branch
|
# we'll get weird things like seeing older master that was merged into a PR branch
|
||||||
# that was then merged into master.
|
# that was then merged into master.
|
||||||
git log "$merge_base..origin/master" --first-parent > master-log.txt
|
"${master_git_cmd[@]}" > master-log.txt
|
||||||
git log "$merge_base..origin/$branch" --first-parent > "$branch-log.txt"
|
"${branch_git_cmd[@]}" > "$branch-log.txt"
|
||||||
|
|
||||||
|
# Check for diamond merges.
|
||||||
|
"${master_git_cmd[@]}" --oneline --grep "Merge branch '" | grep ''
|
||||||
|
diamonds_in_master=$?
|
||||||
|
|
||||||
|
"${branch_git_cmd[@]}" --oneline --grep "Merge branch '" | grep ''
|
||||||
|
diamonds_in_branch=$?
|
||||||
|
|
||||||
|
if [ "$diamonds_in_master" -eq 0 ] || [ "$diamonds_in_branch" -eq 0 ]
|
||||||
|
then
|
||||||
|
# DO NOT ADD automated handling of diamond merges to this script.
|
||||||
|
# It is an unsustainable way to work with git, and it MUST be visible.
|
||||||
|
echo Warning: suspected diamond merges above.
|
||||||
|
echo Some commits will be missed, review these manually.
|
||||||
|
fi
|
||||||
|
|
||||||
# NOTE keep in sync with ./changelog.sh.
|
# NOTE keep in sync with ./changelog.sh.
|
||||||
# Search for PR numbers in commit messages. First variant is normal merge, and second
|
# Search for PR numbers in commit messages. First variant is normal merge, and second
|
||||||
@ -24,26 +41,32 @@ find_prs=(sed -n "s/^.*Merge pull request #\([[:digit:]]\+\).*$/\1/p;
|
|||||||
# Find all master PRs that are not in branch by calculating differences of two PR lists.
|
# Find all master PRs that are not in branch by calculating differences of two PR lists.
|
||||||
grep -f "$branch-prs.txt" -F -x -v master-prs.txt > "$branch-diff-prs.txt"
|
grep -f "$branch-prs.txt" -F -x -v master-prs.txt > "$branch-diff-prs.txt"
|
||||||
|
|
||||||
rm "$branch-report.tsv" ||:
|
|
||||||
|
|
||||||
echo "$(wc -l < "$branch-diff-prs".txt) PRs differ between $branch and master."
|
echo "$(wc -l < "$branch-diff-prs".txt) PRs differ between $branch and master."
|
||||||
|
|
||||||
|
function github_download()
|
||||||
|
{
|
||||||
|
local url=${1}
|
||||||
|
local file=${2}
|
||||||
|
if ! [ -f "$file" ]
|
||||||
|
then
|
||||||
|
if ! curl -H "Authorization: token $GITHUB_TOKEN" \
|
||||||
|
-sSf "$url" \
|
||||||
|
> "$file"
|
||||||
|
then
|
||||||
|
>&2 echo "Failed to download '$url' to '$file'. Contents: '$(cat "$file")'."
|
||||||
|
rm "$file"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
sleep 0.1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
rm "$branch-report.tsv" &> /dev/null ||:
|
||||||
for pr in $(cat "$branch-diff-prs.txt")
|
for pr in $(cat "$branch-diff-prs.txt")
|
||||||
do
|
do
|
||||||
# Download PR info from github.
|
# Download PR info from github.
|
||||||
file="pr$pr.json"
|
file="pr$pr.json"
|
||||||
if ! [ -f "$file" ]
|
github_download "https://api.github.com/repos/ClickHouse/ClickHouse/pulls/$pr" "$file" || continue
|
||||||
then
|
|
||||||
if ! curl -H "Authorization: token $GITHUB_TOKEN" \
|
|
||||||
-sSf "https://api.github.com/repos/ClickHouse/ClickHouse/pulls/$pr" \
|
|
||||||
> "$file"
|
|
||||||
then
|
|
||||||
>&2 cat "$file"
|
|
||||||
rm "$file"
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
sleep 0.1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! [ "$pr" == "$(jq -r .number "$file")" ]
|
if ! [ "$pr" == "$(jq -r .number "$file")" ]
|
||||||
then
|
then
|
||||||
@ -82,3 +105,4 @@ do
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
echo "Done."
|
||||||
|
@ -7,6 +7,15 @@ log_command=(git log "$from..$to" --first-parent)
|
|||||||
|
|
||||||
"${log_command[@]}" > "changelog-log.txt"
|
"${log_command[@]}" > "changelog-log.txt"
|
||||||
|
|
||||||
|
# Check for diamond merges.
|
||||||
|
if "${log_command[@]}" --oneline --grep "Merge branch '" | grep ''
|
||||||
|
then
|
||||||
|
# DO NOT ADD automated handling of diamond merges to this script.
|
||||||
|
# It is an unsustainable way to work with git, and it MUST be visible.
|
||||||
|
echo Warning: suspected diamond merges above.
|
||||||
|
echo Some commits will be missed, review these manually.
|
||||||
|
fi
|
||||||
|
|
||||||
# NOTE keep in sync with ./backport.sh.
|
# NOTE keep in sync with ./backport.sh.
|
||||||
# Search for PR numbers in commit messages. First variant is normal merge, and second
|
# Search for PR numbers in commit messages. First variant is normal merge, and second
|
||||||
# variant is squashed. Next are some backport message variants.
|
# variant is squashed. Next are some backport message variants.
|
||||||
@ -19,14 +28,6 @@ find_prs=(sed -n "s/^.*Merge pull request #\([[:digit:]]\+\).*$/\1/p;
|
|||||||
|
|
||||||
echo "$(wc -l < "changelog-prs.txt") PRs added between $from and $to."
|
echo "$(wc -l < "changelog-prs.txt") PRs added between $from and $to."
|
||||||
|
|
||||||
if "${log_command[@]}" --oneline --grep "Merge branch '" | grep ''
|
|
||||||
then
|
|
||||||
# DO NOT ADD automated handling of diamond merges to this script.
|
|
||||||
# It is an unsustainable way to work with git, and it MUST be visible.
|
|
||||||
echo Warning: suspected diamond merges above.
|
|
||||||
echo Some commits will be missed, review these manually.
|
|
||||||
fi
|
|
||||||
|
|
||||||
function github_download()
|
function github_download()
|
||||||
{
|
{
|
||||||
local url=${1}
|
local url=${1}
|
||||||
@ -37,9 +38,7 @@ function github_download()
|
|||||||
-sSf "$url" \
|
-sSf "$url" \
|
||||||
> "$file"
|
> "$file"
|
||||||
then
|
then
|
||||||
>&2 echo "Failed to download '$url' to '$file'. Contents: '"
|
>&2 echo "Failed to download '$url' to '$file'. Contents: '$(cat "$file")'."
|
||||||
>&2 cat "$file"
|
|
||||||
>&2 echo "'."
|
|
||||||
rm "$file"
|
rm "$file"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
Loading…
Reference in New Issue
Block a user