mirror of
https://github.com/roytam1/UXP.git
synced 2026-05-26 13:58:49 +00:00
121d56e082
- Update packaging scripts to support both lzma and bzip2 - Update python script to support lzma - Update test scripts to support lzma to be thorough This all requires xz to be available in the path on the build system.
128 lines
3.4 KiB
Bash
128 lines
3.4 KiB
Bash
#!/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/.
|
|
|
|
#
|
|
# This tool generates full update packages for the update system.
|
|
# Author: Darin Fisher
|
|
#
|
|
|
|
. $(dirname "$0")/common.sh
|
|
|
|
# -----------------------------------------------------------------------------
|
|
|
|
print_usage() {
|
|
notice "Usage: $(basename $0) [OPTIONS] ARCHIVE DIRECTORY"
|
|
}
|
|
|
|
if [ $# = 0 ]; then
|
|
print_usage
|
|
exit 1
|
|
fi
|
|
|
|
if [ $1 = -h ]; then
|
|
print_usage
|
|
notice ""
|
|
notice "The contents of DIRECTORY will be stored in ARCHIVE."
|
|
notice ""
|
|
notice "Options:"
|
|
notice " -h show this help text"
|
|
notice ""
|
|
exit 1
|
|
fi
|
|
|
|
# -----------------------------------------------------------------------------
|
|
|
|
archive="$1"
|
|
targetdir="$2"
|
|
# Prevent the workdir from being inside the targetdir so it isn't included in
|
|
# the update mar.
|
|
if [ $(echo "$targetdir" | grep -c '\/$') = 1 ]; then
|
|
# Remove the /
|
|
targetdir=$(echo "$targetdir" | sed -e 's:\/$::')
|
|
fi
|
|
workdir="$targetdir.work"
|
|
updatemanifestv2="$workdir/updatev2.manifest"
|
|
updatemanifestv3="$workdir/updatev3.manifest"
|
|
targetfiles="updatev2.manifest updatev3.manifest"
|
|
|
|
mkdir -p "$workdir"
|
|
|
|
# Generate a list of all files in the target directory.
|
|
pushd "$targetdir"
|
|
if test $? -ne 0 ; then
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -f "precomplete" ]; then
|
|
if [ ! -f "Contents/Resources/precomplete" ]; then
|
|
notice "precomplete file is missing!"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
list_files files
|
|
|
|
popd
|
|
|
|
# Add the type of update to the beginning of the update manifests.
|
|
> "$updatemanifestv2"
|
|
> "$updatemanifestv3"
|
|
notice ""
|
|
notice "Adding type instruction to update manifests"
|
|
notice " type complete"
|
|
echo "type \"complete\"" >> "$updatemanifestv2"
|
|
echo "type \"complete\"" >> "$updatemanifestv3"
|
|
|
|
notice ""
|
|
notice "Adding file add instructions to update manifests"
|
|
num_files=${#files[*]}
|
|
|
|
for ((i=0; $i<$num_files; i=$i+1)); do
|
|
f="${files[$i]}"
|
|
|
|
if check_for_add_if_not_update "$f"; then
|
|
make_add_if_not_instruction "$f" "$updatemanifestv3"
|
|
if check_for_add_to_manifestv2 "$f"; then
|
|
make_add_instruction "$f" "$updatemanifestv2" "" 1
|
|
fi
|
|
else
|
|
make_add_instruction "$f" "$updatemanifestv2" "$updatemanifestv3"
|
|
fi
|
|
|
|
dir=$(dirname "$f")
|
|
mkdir -p "$workdir/$dir"
|
|
if [[ -n $MAR_OLD_FORMAT ]]; then
|
|
$BZIP2 -cz9 "$targetdir/$f" > "$workdir/$f"
|
|
else
|
|
$XZ --compress --x86 --lzma2 --format=xz --check=crc64 --force --stdout "$targetdir/$f" > "$workdir/$f"
|
|
fi
|
|
copy_perm "$targetdir/$f" "$workdir/$f"
|
|
|
|
targetfiles="$targetfiles \"$f\""
|
|
done
|
|
|
|
# Append remove instructions for any dead files.
|
|
notice ""
|
|
notice "Adding file and directory remove instructions from file 'removed-files'"
|
|
append_remove_instructions "$targetdir" "$updatemanifestv2" "$updatemanifestv3"
|
|
|
|
if [[ -n $MAR_OLD_FORMAT ]]; then
|
|
$BZIP2 -z9 "$updatemanifestv2" && mv -f "$updatemanifestv2.bz2" "$updatemanifestv2"
|
|
$BZIP2 -z9 "$updatemanifestv3" && mv -f "$updatemanifestv3.bz2" "$updatemanifestv3"
|
|
else
|
|
$XZ --compress --x86 --lzma2 --format=xz --check=crc64 --force "$updatemanifestv2" && mv -f "$updatemanifestv2.xz" "$updatemanifestv2"
|
|
$XZ --compress --x86 --lzma2 --format=xz --check=crc64 --force "$updatemanifestv3" && mv -f "$updatemanifestv3.xz" "$updatemanifestv3"
|
|
fi
|
|
|
|
eval "$MAR -C \"$workdir\" -c output.mar $targetfiles"
|
|
mv -f "$workdir/output.mar" "$archive"
|
|
|
|
# cleanup
|
|
rm -fr "$workdir"
|
|
|
|
notice ""
|
|
notice "Finished"
|
|
notice ""
|