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 --- dom/media/webrtc/third_party_build/elm_rebase.sh | 247 +++++++++++++++++++++++ 1 file changed, 247 insertions(+) create mode 100644 dom/media/webrtc/third_party_build/elm_rebase.sh (limited to 'dom/media/webrtc/third_party_build/elm_rebase.sh') diff --git a/dom/media/webrtc/third_party_build/elm_rebase.sh b/dom/media/webrtc/third_party_build/elm_rebase.sh new file mode 100644 index 0000000000..4d53373d35 --- /dev/null +++ b/dom/media/webrtc/third_party_build/elm_rebase.sh @@ -0,0 +1,247 @@ +#!/bin/bash + +# This script exists to help with the rebase process on elm. It rebases +# each patch individually to make it easier to fix rebase conflicts +# without jeopardizing earlier, sucessfully rebased commits. In order to +# limit rebase conflicts around generated moz.build files, it regenerates +# moz.build file commits. It also ensures any commits with 'FLOAT' in the +# commit summary are pushed to the top of the fast-forward stack to help +# the sheriffs more easily merge our commit stack from elm to moz-central. +# +# Occasionally, there will be upstream vendored commits that break the +# build file generation with follow on commits that fix that error. In +# order to allow the rebase process to work more smoothly, it is possible +# to annotate a commit with the string '(skip-generation)' and normal +# build file generation (detected with changes to BUILD.gn files) is +# disabled for that commit. The script outputs instructions for handling +# this situation. +# +# Note: the very first rebase operation will require some manual +# intervention. The user will need to provide, at minimum, the commit that +# corresponds to moz-central upon which the fast-forward stack is based. +# It may also be necessary to provide the first commit of the +# fast-forward stack. Example: +# MOZ_BOTTOM_FF=30f0afb7e4c5 \ +# MOZ_CURRENT_CENTRAL=cad1bd47c273 \ +# bash dom/media/webrtc/third_party_build/elm_rebase.sh +# +# Assumes the top of the fast-forward stack to rebase is the current revision, +# ".". + +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 + +GENERATION_ERROR=$" +Generating build files has failed. The most common reason for this +failure is that the current commit has an upcoming '(fix-xxxxxx)' commit +that will then allow the build file generation to complete. If the +current situation seems to fit that pattern, adding a line with +'(skip-generation)' to the commit message will ensure that future rebase +operations do not attempt to generate build files for this commit. It may +be as simple as running the following commands: + HGPLAIN=1 hg log -T '{desc}' -r tip > $TMP_DIR/commit_message.txt + ed -s $TMP_DIR/commit_message.txt <<< $'3i\n(skip-generation)\n\n.\nw\nq' + hg commit --amend -l $TMP_DIR/commit_message.txt + bash $0 +" +COMMIT_LIST_FILE=$TMP_DIR/rebase-commit-list.txt +export HGPLAIN=1 + +# After this point: +# * eE: All commands should succeed. +# * o pipefail: All stages of all pipes should succeed. +set -eEo pipefail + +if [ -f $STATE_DIR/rebase_resume_state ]; then + source $STATE_DIR/rebase_resume_state +else + + if [ "x" == "x$MOZ_TOP_FF" ]; then + MOZ_TOP_FF=`hg log -r . -T"{node|short}"` + + ERROR_HELP=$" +The topmost commit to be rebased is not in the public phase. Should it be +pushed to elm first? If this is intentional, please rerun the command and pass +it in explicitly: + MOZ_TOP_FF=$MOZ_TOP_FF bash $0 +" + if [[ $(hg phase -r .) != *public ]]; then + echo "$ERROR_HELP" + exit 1 + fi + ERROR_HELP="" + + ERROR_HELP=$" +The topmost commit to be rebased is public but has descendants. If those +descendants should not be rebased, please rerun the command and pass the commit +in explicitly: + MOZ_TOP_FF=$MOZ_TOP_FF bash $0 +" + if [ "x" != "x$(hg log -r 'descendants(.) and !.' -T'{node|short}')" ]; then + echo "$ERROR_HELP" + exit 1 + fi + ERROR_HELP="" + fi + + ERROR_HELP=$" +An error here is likely because no revision for central is found. +One possible reason for this is this is your first rebase operation. +To 'bootstrap' the first rebase operation, please find the +moz-central commit that the vendoring commits is based on, and +rerun the command: + MOZ_CURRENT_CENTRAL={central-sha} bash $0 + +You may also need to provide the bottom commit of the fast-forward +stack. The bottom commit means the commit following central. This +could be the sha of the .arcconfig commit if it is the bottom commit. +That command looks like: + MOZ_BOTTOM_FF={base-sha} MOZ_CURRENT_CENTRAL={central-sha} bash $0 +" + if [ "x" == "x$MOZ_CURRENT_CENTRAL" ]; then + MOZ_CURRENT_CENTRAL=`hg log -r central -T"{node|short}"` + fi + if [ "x" == "x$MOZ_BOTTOM_FF" ]; then + MOZ_BOTTOM_FF=`hg log -r $MOZ_CURRENT_CENTRAL~-1 -T"{node|short}"` + fi + ERROR_HELP="" + + if [ "x" == "x$MOZ_BOTTOM_FF" ]; then + echo "No value found for the bottom commit of the fast-forward commit stack." + exit 1 + fi + + # 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 + + hg pull central + MOZ_NEW_CENTRAL=`hg log -r central -T"{node|short}"` + + echo "moz-central in elm is currently $MOZ_CURRENT_CENTRAL" + echo "bottom of fast-foward tree is $MOZ_BOTTOM_FF" + echo "top of fast-forward tree (webrtc-fast-forward) is $MOZ_TOP_FF" + echo "new target for elm rebase $MOZ_NEW_CENTRAL (tip of moz-central)" + + hg log -T '{rev}:{node|short} {desc|firstline}\n' \ + -r $MOZ_BOTTOM_FF::$MOZ_TOP_FF > $COMMIT_LIST_FILE + + # move all FLOAT lines to end of file, and delete the "empty" tilde line + # line at the beginning + ed -s $COMMIT_LIST_FILE <<< $'g/- FLOAT -/m$\ng/^~$/d\nw\nq' + + MOZ_BOOKMARK=`date "+webrtc-fast-forward-%Y-%m-%d--%H-%M"` + hg bookmark -r elm $MOZ_BOOKMARK + + hg update $MOZ_NEW_CENTRAL + + # pre-work is complete, let's write out a temporary config file that allows + # us to resume + echo $"export MOZ_CURRENT_CENTRAL=$MOZ_CURRENT_CENTRAL +export MOZ_BOTTOM_FF=$MOZ_BOTTOM_FF +export MOZ_TOP_FF=$MOZ_TOP_FF +export MOZ_NEW_CENTRAL=$MOZ_NEW_CENTRAL +export MOZ_BOOKMARK=$MOZ_BOOKMARK +" > $STATE_DIR/rebase_resume_state +fi # if [ -f $STATE_DIR/rebase_resume_state ]; then ; else + +# grab all commits +COMMITS=`cat $COMMIT_LIST_FILE | awk '{print $1;}'` + +echo -n "Commits: " +for commit in $COMMITS; do +echo -n "$commit " +done +echo "" + +for commit in $COMMITS; do + echo "Processing $commit" + FULL_COMMIT_LINE=`head -1 $COMMIT_LIST_FILE` + + function remove_commit () { + echo "Removing from list '$FULL_COMMIT_LINE'" + ed -s $COMMIT_LIST_FILE <<< $'1d\nw\nq' + } + + IS_BUILD_COMMIT=`hg log -T '{desc|firstline}' -r $commit \ + | grep "file updates" | wc -l | tr -d " " || true` + echo "IS_BUILD_COMMIT: $IS_BUILD_COMMIT" + if [ "x$IS_BUILD_COMMIT" != "x0" ]; then + echo "Skipping $commit:" + hg log -T '{desc|firstline}' -r $commit + remove_commit + continue + fi + + IS_SKIP_GEN_COMMIT=`hg log --verbose \ + -r $commit \ + | grep "skip-generation" | wc -l | tr -d " " || true` + echo "IS_SKIP_GEN_COMMIT: $IS_SKIP_GEN_COMMIT" + + echo "Generate patch for: $commit" + hg export -r $commit > $TMP_DIR/rebase.patch + + echo "Import patch for $commit" + hg import $TMP_DIR/rebase.patch || \ + ( hg log -T '{desc}' -r $commit > $TMP_DIR/rebase_commit_message.txt ; \ + remove_commit ; \ + echo "Error importing: '$FULL_COMMIT_LINE'" ; \ + echo "Please fix import errors, then:" ; \ + echo " hg commit -l $TMP_DIR/rebase_commit_message.txt" ; \ + echo " bash $0" ; \ + exit 1 ) + + remove_commit + + if [ "x$IS_SKIP_GEN_COMMIT" != "x0" ]; then + echo "Skipping build generation for $commit" + continue + fi + + MODIFIED_BUILD_RELATED_FILE_CNT=`hg diff -c tip --stat \ + --include 'third_party/libwebrtc/**BUILD.gn' \ + --include 'third_party/libwebrtc/webrtc.gni' \ + --include 'dom/media/webrtc/third_party_build/gn-configs/webrtc.json' \ + | wc -l | tr -d " "` + echo "MODIFIED_BUILD_RELATED_FILE_CNT: $MODIFIED_BUILD_RELATED_FILE_CNT" + if [ "x$MODIFIED_BUILD_RELATED_FILE_CNT" != "x0" ]; then + echo "Regenerate build files" + ./mach python python/mozbuild/mozbuild/gn_processor.py \ + dom/media/webrtc/third_party_build/gn-configs/webrtc.json || \ + ( echo "$GENERATION_ERROR" ; exit 1 ) + + MOZ_BUILD_CHANGE_CNT=`hg status third_party/libwebrtc \ + --include 'third_party/libwebrtc/**moz.build' | wc -l | tr -d " "` + if [ "x$MOZ_BUILD_CHANGE_CNT" != "x0" ]; then + bash dom/media/webrtc/third_party_build/commit-build-file-changes.sh + NEWEST_COMMIT=`hg log -T '{desc|firstline}' -r tip` + echo "NEWEST_COMMIT: $NEWEST_COMMIT" + echo "NEWEST_COMMIT: $NEWEST_COMMIT" >> $LOG_DIR/rebase-build-changes-commits.log + fi + echo "Done generating build files" + fi + + echo "Done processing $commit" +done + +rm $STATE_DIR/rebase_resume_state + +REMAINING_STEPS=$" +The rebase process is complete. The following steps must be completed manually: + ./mach bootstrap --application=browser --no-system-changes + ./mach build + hg push -r tip --force + hg push -B $MOZ_BOOKMARK +" +echo "$REMAINING_STEPS" -- cgit v1.2.3