tools/update-packaging/make_full_update.sh

Tue, 06 Jan 2015 21:39:09 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Tue, 06 Jan 2015 21:39:09 +0100
branch
TOR_BUG_9701
changeset 8
97036ab72558
permissions
-rwxr-xr-x

Conditionally force memory storage according to privacy.thirdparty.isolate;
This solves Tor bug #9701, complying with disk avoidance documented in
https://www.torproject.org/projects/torbrowser/design/#disk-avoidance.

     1 #!/bin/bash
     2 # This Source Code Form is subject to the terms of the Mozilla Public
     3 # License, v. 2.0. If a copy of the MPL was not distributed with this
     4 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
     6 #
     7 # This tool generates full update packages for the update system.
     8 # Author: Darin Fisher
     9 #
    11 . $(dirname "$0")/common.sh
    13 # TODO: it would be better to pass this as a command line option.
    14 directories_to_remove='TorBrowser/Data/Browser/profile.default/extensions/https-everywhere@eff.org'
    16 # -----------------------------------------------------------------------------
    18 print_usage() {
    19   notice "Usage: $(basename $0) [OPTIONS] ARCHIVE DIRECTORY"
    20 }
    22 if [ $# = 0 ]; then
    23   print_usage
    24   exit 1
    25 fi
    27 if [ $1 = -h ]; then
    28   print_usage
    29   notice ""
    30   notice "The contents of DIRECTORY will be stored in ARCHIVE."
    31   notice ""
    32   notice "Options:"
    33   notice "  -h  show this help text"
    34   notice "  -q  be less verbose"
    35   notice ""
    36   exit 1
    37 fi
    39 if [ $1 = -q ]; then
    40   QUIET=1
    41   shift
    42 fi
    44 # -----------------------------------------------------------------------------
    46 archive="$1"
    47 targetdir="$2"
    48 # Prevent the workdir from being inside the targetdir so it isn't included in
    49 # the update mar.
    50 if [ $(echo "$targetdir" | grep -c '\/$') = 1 ]; then
    51   # Remove the /
    52   targetdir=$(echo "$targetdir" | sed -e 's:\/$::')
    53 fi
    54 workdir="$targetdir.work"
    55 updatemanifestv2="$workdir/updatev2.manifest"
    56 updatemanifestv3="$workdir/updatev3.manifest"
    57 targetfiles="updatev2.manifest updatev3.manifest"
    59 mkdir -p "$workdir"
    61 # On Mac, the precomplete file added by Bug 386760 will cause OS X to reload the
    62 # Info.plist so it launches the right architecture, bug 600098
    64 # Generate a list of all files in the target directory.
    65 pushd "$targetdir"
    66 if test $? -ne 0 ; then
    67   exit 1
    68 fi
    70 if [ ! -f "precomplete" ]; then
    71   notice "precomplete file is missing!"
    72   exit 1
    73 fi
    75 list_files files
    76 list_symlinks symlinks symlink_targets
    78 popd
    80 # Add the type of update to the beginning of the update manifests.
    81 > "$updatemanifestv2"
    82 > "$updatemanifestv3"
    83 notice ""
    84 notice "Adding type instruction to update manifests"
    85 notice "       type complete"
    86 echo "type \"complete\"" >> "$updatemanifestv2"
    87 echo "type \"complete\"" >> "$updatemanifestv3"
    89 # If removal of any old, existing directories is desired, emit the appropriate
    90 # rmrfdir commands.
    91 notice ""
    92 notice "Adding directory removal instructions to update manifests"
    93 for dir_to_remove in $directories_to_remove; do
    94   # rmrfdir requires a trailing slash; if slash is missing, add one.
    95   if ! [[ "$dir_to_remove" =~ /$ ]]; then
    96    dir_to_remove="${dir_to_remove}/"
    97   fi
    98   echo "rmrfdir \"$dir_to_remove\"" >> "$updatemanifestv2"
    99   echo "rmrfdir \"$dir_to_remove\"" >> "$updatemanifestv3"
   100 done
   102 notice ""
   103 notice "Adding file add instructions to update manifests"
   104 num_files=${#files[*]}
   106 for ((i=0; $i<$num_files; i=$i+1)); do
   107   f="${files[$i]}"
   109   if check_for_add_if_not_update "$f"; then
   110     make_add_if_not_instruction "$f" "$updatemanifestv3"
   111     if check_for_add_to_manifestv2 "$f"; then
   112       make_add_instruction "$f" "$updatemanifestv2" "" 1
   113     fi
   114   else
   115     make_add_instruction "$f" "$updatemanifestv2" "$updatemanifestv3"
   116   fi
   118   dir=$(dirname "$f")
   119   mkdir -p "$workdir/$dir"
   120   $BZIP2 -cz9 "$targetdir/$f" > "$workdir/$f"
   121   copy_perm "$targetdir/$f" "$workdir/$f"
   123   targetfiles="$targetfiles \"$f\""
   124 done
   126 notice ""
   127 notice "Adding symlink add instructions to update manifests"
   128 num_symlinks=${#symlinks[*]}
   129 for ((i=0; $i<$num_symlinks; i=$i+1)); do
   130   link="${symlinks[$i]}"
   131   target="${symlink_targets[$i]}"
   132   make_addsymlink_instruction "$link" "$target" "$updatemanifestv2" "$updatemanifestv3"
   133 done
   135 # Append remove instructions for any dead files.
   136 notice ""
   137 notice "Adding file and directory remove instructions from file 'removed-files'"
   138 append_remove_instructions "$targetdir" "$updatemanifestv2" "$updatemanifestv3"
   140 $BZIP2 -z9 "$updatemanifestv2" && mv -f "$updatemanifestv2.bz2" "$updatemanifestv2"
   141 $BZIP2 -z9 "$updatemanifestv3" && mv -f "$updatemanifestv3.bz2" "$updatemanifestv3"
   143 eval "$MAR -C \"$workdir\" -c output.mar $targetfiles"
   144 mv -f "$workdir/output.mar" "$archive"
   146 # cleanup
   147 rm -fr "$workdir"
   149 notice ""
   150 notice "Finished"
   151 notice ""

mercurial