forked from mirrors/gecko-dev
		
	 ae9dd1db3c
			
		
	
	
		ae9dd1db3c
		
	
	
	
	
		
			
			We needed one nightly build that updates channel-prefs.js. Now that it's done, and a watershed is in place, we can restore mar file generation to its normal logic. Differential Revision: https://phabricator.services.mozilla.com/D167036
		
			
				
	
	
		
			201 lines
		
	
	
	
		
			5.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			201 lines
		
	
	
	
		
			5.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
| #!/bin/bash
 | |
| # This Source Code Form is subject to the terms of the Mozilla Public
 | |
| # License, v. 2.0. If a copy of the MPL was not distributed with this
 | |
| # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 | |
| 
 | |
| #
 | |
| # Code shared by update packaging scripts.
 | |
| # Author: Darin Fisher
 | |
| #
 | |
| 
 | |
| # -----------------------------------------------------------------------------
 | |
| QUIET=0
 | |
| 
 | |
| # By default just assume that these tools exist on our path
 | |
| MAR=${MAR:-mar}
 | |
| MBSDIFF=${MBSDIFF:-mbsdiff}
 | |
| XZ=${XZ:-xz}
 | |
| $XZ --version > /dev/null 2>&1
 | |
| if [ $? -ne 0 ]; then
 | |
|   # If $XZ is not set and not found on the path then this is probably
 | |
|   # running on a windows buildbot. Some of the Windows build systems have
 | |
|   # xz.exe in topsrcdir/xz/. Look in the places this would be in both a
 | |
|   # mozilla-central and comm-central build.
 | |
|   XZ="$(dirname "$(dirname "$(dirname "$0")")")/xz/xz.exe"
 | |
|   $XZ --version > /dev/null 2>&1
 | |
|   if [ $? -ne 0 ]; then
 | |
|     XZ="$(dirname "$(dirname "$(dirname "$(dirname "$0")")")")/xz/xz.exe"
 | |
|     $XZ --version > /dev/null 2>&1
 | |
|     if [ $? -ne 0 ]; then
 | |
|       echo "xz was not found on this system!"
 | |
|       echo "exiting"
 | |
|       exit 1
 | |
|     fi
 | |
|   fi
 | |
| fi
 | |
| # Ensure that we're always using the right compression settings
 | |
| export XZ_OPT="-T1 -7e"
 | |
| 
 | |
| # -----------------------------------------------------------------------------
 | |
| # Helper routines
 | |
| 
 | |
| notice() {
 | |
|   echo "$*" 1>&2
 | |
| }
 | |
| 
 | |
| verbose_notice() {
 | |
|   if [ $QUIET -eq 0 ]; then
 | |
|     notice "$*"
 | |
|   fi
 | |
| }
 | |
| 
 | |
| get_file_size() {
 | |
|   info=($(ls -ln "$1"))
 | |
|   echo ${info[4]}
 | |
| }
 | |
| 
 | |
| copy_perm() {
 | |
|   reference="$1"
 | |
|   target="$2"
 | |
| 
 | |
|   if [ -x "$reference" ]; then
 | |
|     chmod 0755 "$target"
 | |
|   else
 | |
|     chmod 0644 "$target"
 | |
|   fi
 | |
| }
 | |
| 
 | |
| make_add_instruction() {
 | |
|   f="$1"
 | |
|   filev3="$2"
 | |
| 
 | |
|   # Used to log to the console
 | |
|   if [ $4 ]; then
 | |
|     forced=" (forced)"
 | |
|   else
 | |
|     forced=
 | |
|   fi
 | |
| 
 | |
|   is_extension=$(echo "$f" | grep -c 'distribution/extensions/.*/')
 | |
|   if [ $is_extension = "1" ]; then
 | |
|     # Use the subdirectory of the extensions folder as the file to test
 | |
|     # before performing this add instruction.
 | |
|     testdir=$(echo "$f" | sed 's/\(.*distribution\/extensions\/[^\/]*\)\/.*/\1/')
 | |
|     verbose_notice "     add-if \"$testdir\" \"$f\""
 | |
|     echo "add-if \"$testdir\" \"$f\"" >> "$filev3"
 | |
|   else
 | |
|     verbose_notice "        add \"$f\"$forced"
 | |
|     echo "add \"$f\"" >> "$filev3"
 | |
|   fi
 | |
| }
 | |
| 
 | |
| check_for_add_if_not_update() {
 | |
|   add_if_not_file_chk="$1"
 | |
| 
 | |
|   if [ `basename $add_if_not_file_chk` = "channel-prefs.js" -o \
 | |
|        `basename $add_if_not_file_chk` = "update-settings.ini" ]; then
 | |
|     ## "true" *giggle*
 | |
|     return 0;
 | |
|   fi
 | |
|   ## 'false'... because this is bash. Oh yay!
 | |
|   return 1;
 | |
| }
 | |
| 
 | |
| make_add_if_not_instruction() {
 | |
|   f="$1"
 | |
|   filev3="$2"
 | |
| 
 | |
|   verbose_notice " add-if-not \"$f\" \"$f\""
 | |
|   echo "add-if-not \"$f\" \"$f\"" >> "$filev3"
 | |
| }
 | |
| 
 | |
| make_patch_instruction() {
 | |
|   f="$1"
 | |
|   filev3="$2"
 | |
| 
 | |
|   is_extension=$(echo "$f" | grep -c 'distribution/extensions/.*/')
 | |
|   if [ $is_extension = "1" ]; then
 | |
|     # Use the subdirectory of the extensions folder as the file to test
 | |
|     # before performing this add instruction.
 | |
|     testdir=$(echo "$f" | sed 's/\(.*distribution\/extensions\/[^\/]*\)\/.*/\1/')
 | |
|     verbose_notice "   patch-if \"$testdir\" \"$f.patch\" \"$f\""
 | |
|     echo "patch-if \"$testdir\" \"$f.patch\" \"$f\"" >> "$filev3"
 | |
|   else
 | |
|     verbose_notice "      patch \"$f.patch\" \"$f\""
 | |
|     echo "patch \"$f.patch\" \"$f\"" >> "$filev3"
 | |
|   fi
 | |
| }
 | |
| 
 | |
| append_remove_instructions() {
 | |
|   dir="$1"
 | |
|   filev3="$2"
 | |
| 
 | |
|   if [ -f "$dir/removed-files" ]; then
 | |
|     listfile="$dir/removed-files"
 | |
|   elif [ -f "$dir/Contents/Resources/removed-files" ]; then
 | |
|     listfile="$dir/Contents/Resources/removed-files"
 | |
|   fi
 | |
|   if [ -n "$listfile" ]; then
 | |
|     # Map spaces to pipes so that we correctly handle filenames with spaces.
 | |
|     files=($(cat "$listfile" | tr " " "|"  | sort -r))
 | |
|     num_files=${#files[*]}
 | |
|     for ((i=0; $i<$num_files; i=$i+1)); do
 | |
|       # Map pipes back to whitespace and remove carriage returns
 | |
|       f=$(echo ${files[$i]} | tr "|" " " | tr -d '\r')
 | |
|       # Trim whitespace
 | |
|       f=$(echo $f)
 | |
|       # Exclude blank lines.
 | |
|       if [ -n "$f" ]; then
 | |
|         # Exclude comments
 | |
|         if [ ! $(echo "$f" | grep -c '^#') = 1 ]; then
 | |
|           if [ $(echo "$f" | grep -c '\/$') = 1 ]; then
 | |
|             verbose_notice "      rmdir \"$f\""
 | |
|             echo "rmdir \"$f\"" >> "$filev3"
 | |
|           elif [ $(echo "$f" | grep -c '\/\*$') = 1 ]; then
 | |
|             # Remove the *
 | |
|             f=$(echo "$f" | sed -e 's:\*$::')
 | |
|             verbose_notice "    rmrfdir \"$f\""
 | |
|             echo "rmrfdir \"$f\"" >> "$filev3"
 | |
|           else
 | |
|             verbose_notice "     remove \"$f\""
 | |
|             echo "remove \"$f\"" >> "$filev3"
 | |
|           fi
 | |
|         fi
 | |
|       fi
 | |
|     done
 | |
|   fi
 | |
| }
 | |
| 
 | |
| # List all files in the current directory, stripping leading "./"
 | |
| # Pass a variable name and it will be filled as an array.
 | |
| list_files() {
 | |
|   count=0
 | |
|   temp_filelist=$(mktemp)
 | |
|   find . -type f \
 | |
|     ! -name "update.manifest" \
 | |
|     ! -name "updatev2.manifest" \
 | |
|     ! -name "updatev3.manifest" \
 | |
|     | sed 's/\.\/\(.*\)/\1/' \
 | |
|     | sort -r > "${temp_filelist}"
 | |
|   while read file; do
 | |
|     eval "${1}[$count]=\"$file\""
 | |
|     (( count++ ))
 | |
|   done < "${temp_filelist}"
 | |
|   rm "${temp_filelist}"
 | |
| }
 | |
| 
 | |
| # List all directories in the current directory, stripping leading "./"
 | |
| list_dirs() {
 | |
|   count=0
 | |
|   temp_dirlist=$(mktemp)
 | |
|   find . -type d \
 | |
|     ! -name "." \
 | |
|     ! -name ".." \
 | |
|     | sed 's/\.\/\(.*\)/\1/' \
 | |
|     | sort -r > "${temp_dirlist}"
 | |
|   while read dir; do
 | |
|     eval "${1}[$count]=\"$dir\""
 | |
|     (( count++ ))
 | |
|   done < "${temp_dirlist}"
 | |
|   rm "${temp_dirlist}"
 | |
| }
 |