From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- .../third_party_build/build_no_op_commits.sh | 126 +++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 dom/media/webrtc/third_party_build/build_no_op_commits.sh (limited to 'dom/media/webrtc/third_party_build/build_no_op_commits.sh') diff --git a/dom/media/webrtc/third_party_build/build_no_op_commits.sh b/dom/media/webrtc/third_party_build/build_no_op_commits.sh new file mode 100644 index 0000000000..eff61a5eb5 --- /dev/null +++ b/dom/media/webrtc/third_party_build/build_no_op_commits.sh @@ -0,0 +1,126 @@ +#!/bin/bash + +function show_error_msg() +{ + echo "*** ERROR *** $? line $1 $0 did not complete successfully!" + echo "$ERROR_HELP" +} +ERROR_HELP="" + +# Print an Error message if `set -eE` causes the script to exit due to a failed command +trap 'show_error_msg $LINENO' ERR + +source dom/media/webrtc/third_party_build/use_config_env.sh + +echo "MOZ_LIBWEBRTC_SRC: $MOZ_LIBWEBRTC_SRC" + +# After this point: +# * eE: All commands should succeed. +# * u: All variables should be defined before use. +# * o pipefail: All stages of all pipes should succeed. +set -eEuo pipefail + +CURRENT_DIR=`pwd` +cd $MOZ_LIBWEBRTC_SRC + +MANUAL_INTERVENTION_COMMIT_FILE="$TMP_DIR/manual_commits.txt" +rm -f $MANUAL_INTERVENTION_COMMIT_FILE + +# Find the common commit between our previous work branch and trunk +CURRENT_RELEASE_BASE=`git merge-base branch-heads/$MOZ_PRIOR_UPSTREAM_BRANCH_HEAD_NUM master` + +# Write no-op files for the cherry-picked release branch commits. For more +# details on what this is doing, see make_upstream_revert_noop.sh. +COMMITS=`git log -r $CURRENT_RELEASE_BASE..branch-heads/$MOZ_PRIOR_UPSTREAM_BRANCH_HEAD_NUM --format='%h'` +for commit in $COMMITS; do + + echo "Processing release branch commit $commit for no-op handling" + + # Don't process the commit if the commit message is missing the customary + # line that shows which upstream commit is being cherry-picked. + CNT=`git show $commit | grep "cherry picked from commit" | wc -l | tr -d " " || true` + if [ $CNT != 1 ]; then + # record the commit to list at the end of this script as + # 'needing intervention' + echo " no cherry-pick info found, skipping commit $commit" + echo "$commit" >> $MANUAL_INTERVENTION_COMMIT_FILE + continue + fi + + CHERRY_PICK_COMMIT=`git show $commit | grep "cherry picked from commit" | tr -d "()" | awk '{ print $5; }'` + SHORT_SHA=`git show --name-only $CHERRY_PICK_COMMIT --format='%h' | head -1` + echo " commit $commit cherry-picks $SHORT_SHA" + + echo "We already cherry-picked this when we vendored $commit." \ + > $STATE_DIR/$SHORT_SHA.no-op-cherry-pick-msg + +done + +# This section checks for commits that may have been cherry-picked in more +# than one release branch. +TARGET_RELEASE_BASE=`git merge-base $MOZ_TARGET_UPSTREAM_BRANCH_HEAD master` +NEW_COMMITS=`git log -r $TARGET_RELEASE_BASE..$MOZ_TARGET_UPSTREAM_BRANCH_HEAD --format='%h'` + +# Convert the files that we've already generated for no-op detection into +# something that we can use as a regular expression for searching. +KNOWN_NO_OP_COMMITS=`cd $STATE_DIR ; \ + ls *.no-op-cherry-pick-msg \ + | sed 's/\.no-op-cherry-pick-msg//' \ + | paste -sd '|' /dev/stdin` + +for commit in $NEW_COMMITS; do + + echo "Processing next release branch commit $commit for no-op handling" + + # Don't process the commit if the commit message is missing the customary + # line that shows which upstream commit is being cherry-picked. + CNT=`git show $commit | grep "cherry picked from commit" | wc -l | tr -d " " || true` + if [ $CNT != 1 ]; then + # record the commit to list at the end of this script as + # 'needing intervention' + echo " no cherry-pick info found, skipping commit $commit" + echo "$commit" >> $MANUAL_INTERVENTION_COMMIT_FILE + continue + fi + + CHERRY_PICK_COMMIT=`git show $commit | grep "cherry picked from commit" | tr -d "()" | awk '{ print $5; }'` + SHORT_SHA=`git show --name-only $CHERRY_PICK_COMMIT --format='%h' | head -1` + + # The trick here is that we only want to include no-op processing for the + # commits that appear both here _and_ in the previous release's cherry-pick + # commits. We check the known list of no-op commits to see if it was + # cherry picked in the previous release branch and then create another + # file for the new release branch commit that will ultimately be a no-op. + if [[ "$SHORT_SHA" =~ ^($KNOWN_NO_OP_COMMITS)$ ]]; then + echo " commit $commit cherry-picks $SHORT_SHA" + cp $STATE_DIR/$SHORT_SHA.no-op-cherry-pick-msg $STATE_DIR/$commit.no-op-cherry-pick-msg + fi + +done + +if [ ! -f $MANUAL_INTERVENTION_COMMIT_FILE ]; then + echo "No commits require manual intervention" + exit +fi + +echo $" +Each of the following commits requires manual intervention to +verify the source of the cherry-pick or there may be errors +reported during the fast-forward processing. Without this +intervention, the common symptom is that the vendored commit +file count (0) will not match the upstream commit file count. +" + +for commit in `cat $MANUAL_INTERVENTION_COMMIT_FILE`; do + SUMMARY=`git show --oneline --name-only $commit | head -1` + echo " '$SUMMARY'" +done + +echo $" +To manually create the no-op tracking files needed, +run the following command for each commit in question: + ( export UPSTREAM_COMMIT=\"{sha-of-upstream-commit}\" ; \\ + export PICKED_COMMIT=\"{sha-of-already-used-commit}\" ; \\ + echo \"We already cherry-picked this when we vendored \$PICKED_COMMIT.\" \\ + > $STATE_DIR/\$UPSTREAM_COMMIT.no-op-cherry-pick-msg ) +" -- cgit v1.2.3