summaryrefslogtreecommitdiffstats
path: root/tools/update-verify/release/common/unpack.sh
blob: a0e12044879b7d700aa6aef2984665068a5e8fac (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#!/bin/bash

unpack_build () {
    unpack_platform="$1"
    dir_name="$2"
    pkg_file="$3"
    locale=$4
    unpack_jars=$5
    update_settings_string=$6
    # If provided, must be a directory containing `update-settings.ini` which
    # will be used instead of attempting to find this file in the unpacked
    # build. `update_settings_string` modifications will still be performed on
    # the file.
    local mac_update_settings_dir_override
    mac_update_settings_dir_override=$7
    local product
    product=$8

    if [ ! -f "$pkg_file" ]; then
      return 1
    fi 
    mkdir -p "$dir_name"
    pushd "$dir_name" > /dev/null || exit
    case $unpack_platform in
        # $unpack_platform is either
        # - a balrog platform name (from testing/mozharness/scripts/release/update-verify-config-creator.py)
        # - a simple platform name (from tools/update-verify/release/updates/verify.sh)
        mac|Darwin_*)
            os=$(uname)
            # How we unpack a dmg differs depending on which platform we're on.
            if [[ "$os" == "Darwin" ]]
            then
                cd ../
                echo "installing $pkg_file"
                ../common/unpack-diskimage.sh "$pkg_file" mnt "$dir_name"
            else
                7z x ../"$pkg_file" > /dev/null
                if [ "$(find . -mindepth 1 -maxdepth 1 | wc -l)" -ne 1 ]
                then
                    echo "Couldn't find .app package"
                    return 1
                fi
                unpack_dir=$(ls -1)
                unpack_dir=$(ls -d "${unpack_dir}")
                mv "${unpack_dir}"/*.app .
                rm -rf "${unpack_dir}"
                appdir=$(ls -1)
                appdir=$(ls -d ./*.app)
                if [ -d "${mac_update_settings_dir_override}" ]; then
                    cp "${mac_update_settings_dir_override}/update-settings.ini" "${appdir}/update-settings.ini"
                else
                    # The updater guesses the location of these files based on
                    # its own target architecture, not the mar. If we're not
                    # unpacking mac-on-mac, we need to copy them so it can find
                    # them. It's important to copy (and not move), because when
                    # we diff the installer vs updated build afterwards, the
                    # installer version will have them in their original place.
                    cp "${appdir}/Contents/Resources/update-settings.ini" "${appdir}/update-settings.ini"
                fi
                cp "${appdir}/Contents/Resources/precomplete" "${appdir}/precomplete"
            fi
            update_settings_file="${appdir}/update-settings.ini"
            ;;
        win32|WINNT_*)
            7z x ../"$pkg_file" > /dev/null
            if [ -d localized ]
            then
              mkdir bin/
              cp -rp nonlocalized/* bin/
              cp -rp localized/*    bin/
              rm -rf nonlocalized
              rm -rf localized
              if [ "$(find optional/ | wc -l)" -gt 1 ]
              then 
                cp -rp optional/*     bin/
                rm -rf optional
              fi
            elif [ -d core ]
            then
              mkdir bin/
              cp -rp core/* bin/
              rm -rf core
            else
              for file in *.xpi
              do
                unzip -o "$file" > /dev/null
              done
              unzip -o "${locale}".xpi > /dev/null
            fi
            update_settings_file='bin/update-settings.ini'
            ;;
        linux|Linux_*)
            if echo "$pkg_file" | grep -q "tar.gz"
            then
                tar xfz ../"$pkg_file" > /dev/null
            elif echo "$pkg_file" | grep -q "tar.bz2"
            then
                tar xfj ../"$pkg_file" > /dev/null
            else
                echo "Unknown package type for file: $pkg_file"
                exit 1
            fi
            update_settings_file=$(echo "$product" | tr '[:upper:]' '[:lower:]')'/update-settings.ini'
            ;;
        *)
            echo "Unknown platform to unpack: $unpack_platform"
            exit 1
    esac

    if [ -n "$unpack_jars" ]; then
        find . \( -name '*.jar' -o -name '*.ja' \) -exec unzip -o {} -d {}.dir \; >/dev/null
    fi

    if [ -n "$update_settings_string" ]; then
       echo "Modifying update-settings.ini"
       sed -e "s/^ACCEPTED_MAR_CHANNEL_IDS.*/ACCEPTED_MAR_CHANNEL_IDS=${update_settings_string}/" < "${update_settings_file}" > "${update_settings_file}.new"
       diff -u "${update_settings_file}" "${update_settings_file}.new"
       echo " "
       rm "${update_settings_file}"
       mv "${update_settings_file}.new" "${update_settings_file}"
    fi

    popd > /dev/null || exit

}