Artifact e7a75a276a731bbf576e3da37417daa72ac633a8:
0000: 23 21 20 2f 75 73 72 2f 62 69 6e 2f 65 6e 76 20 #! /usr/bin/env
0010: 62 61 73 68 0a 0a 50 41 54 48 3d 22 24 7b 50 41 bash..PATH="${PA
0020: 54 48 7d 3a 24 28 64 69 72 6e 61 6d 65 20 22 24 TH}:$(dirname "$
0030: 28 77 68 69 63 68 20 22 24 30 22 29 22 29 22 0a (which "$0")")".
0040: 0a 69 66 20 5b 20 22 24 31 22 20 3d 3d 20 27 2d .if [ "$1" == '-
0050: 2d 63 70 69 6f 27 20 5d 3b 20 74 68 65 6e 0a 09 -cpio' ]; then..
0060: 73 68 69 66 74 0a 0a 09 6d 6f 64 65 3d 27 66 69 shift...mode='fi
0070: 6c 65 27 0a 0a 09 70 6b 67 66 69 6c 65 3d 22 24 le'...pkgfile="$
0080: 31 22 0a 65 6c 73 65 0a 09 6d 6f 64 65 3d 27 64 1".else..mode='d
0090: 69 72 27 0a 0a 09 70 6b 67 73 64 69 72 3d 22 24 ir'...pkgsdir="$
00a0: 31 22 0a 66 69 0a 61 70 70 66 73 64 69 72 3d 22 1".fi.appfsdir="
00b0: 24 32 22 0a 0a 73 68 69 66 74 3b 20 73 68 69 66 $2"..shift; shif
00c0: 74 0a 0a 69 66 20 5b 20 2d 7a 20 22 24 7b 70 6b t..if [ -z "${pk
00d0: 67 73 64 69 72 7d 22 20 2d 61 20 2d 7a 20 22 24 gsdir}" -a -z "$
00e0: 7b 70 6b 67 66 69 6c 65 7d 22 20 5d 20 7c 7c 20 {pkgfile}" ] ||
00f0: 5b 20 2d 7a 20 22 24 7b 61 70 70 66 73 64 69 72 [ -z "${appfsdir
0100: 7d 22 20 5d 3b 20 74 68 65 6e 0a 09 65 63 68 6f }" ]; then..echo
0110: 20 27 55 73 61 67 65 3a 20 61 70 70 66 73 2d 6d 'Usage: appfs-m
0120: 6b 20 7b 2d 2d 63 70 69 6f 20 3c 70 6b 67 66 69 k {--cpio <pkgfi
0130: 6c 65 3e 7c 3c 70 6b 67 73 64 69 72 3e 7d 20 3c le>|<pkgsdir>} <
0140: 61 70 70 66 73 64 69 72 3e 20 5b 3c 73 69 74 65 appfsdir> [<site
0150: 2d 6b 65 79 3e 20 5b 3c 73 69 74 65 2d 63 65 72 -key> [<site-cer
0160: 74 69 66 69 63 61 74 65 3e 5d 5d 27 20 3e 26 32 tificate>]]' >&2
0170: 0a 0a 09 65 78 69 74 20 31 0a 66 69 0a 0a 61 70 ...exit 1.fi..ap
0180: 70 66 73 64 69 72 3d 22 24 28 63 64 20 22 24 7b pfsdir="$(cd "${
0190: 61 70 70 66 73 64 69 72 7d 22 20 26 26 20 70 77 appfsdir}" && pw
01a0: 64 29 22 0a 69 66 20 5b 20 2d 7a 20 22 24 7b 61 d)".if [ -z "${a
01b0: 70 70 66 73 64 69 72 7d 22 20 5d 3b 20 74 68 65 ppfsdir}" ]; the
01c0: 6e 0a 09 65 63 68 6f 20 22 55 6e 61 62 6c 65 20 n..echo "Unable
01d0: 74 6f 20 66 69 6e 64 20 61 70 70 66 73 20 64 69 to find appfs di
01e0: 72 65 63 74 6f 72 79 2e 22 20 3e 26 32 0a 0a 09 rectory." >&2...
01f0: 65 78 69 74 20 31 0a 66 69 0a 0a 6d 6b 64 69 72 exit 1.fi..mkdir
0200: 20 2d 70 20 22 24 7b 61 70 70 66 73 64 69 72 7d -p "${appfsdir}
0210: 2f 73 68 61 31 22 0a 0a 66 75 6e 63 74 69 6f 6e /sha1"..function
0220: 20 73 68 61 31 28 29 20 7b 0a 09 6c 6f 63 61 6c sha1() {..local
0230: 20 66 69 6c 65 6e 61 6d 65 0a 0a 09 66 69 6c 65 filename...file
0240: 6e 61 6d 65 3d 22 24 31 22 0a 0a 09 6f 70 65 6e name="$1"...open
0250: 73 73 6c 20 73 68 61 31 20 22 24 7b 66 69 6c 65 ssl sha1 "${file
0260: 6e 61 6d 65 7d 22 20 7c 20 73 65 64 20 27 73 40 name}" | sed 's@
0270: 2e 2a 3d 20 40 40 27 0a 7d 0a 0a 66 75 6e 63 74 .*= @@'.}..funct
0280: 69 6f 6e 20 65 6d 69 74 5f 6d 61 6e 69 66 65 73 ion emit_manifes
0290: 74 28 29 20 7b 0a 09 66 69 6e 64 20 2e 20 2d 70 t() {..find . -p
02a0: 72 69 6e 74 30 20 7c 20 77 68 69 6c 65 20 49 46 rint0 | while IF
02b0: 53 3d 27 27 20 72 65 61 64 20 2d 72 20 2d 64 20 S='' read -r -d
02c0: 24 27 5c 30 27 20 66 69 6c 65 6e 61 6d 65 3b 20 $'\0' filename;
02d0: 64 6f 0a 09 09 69 66 20 5b 20 22 24 7b 66 69 6c do...if [ "${fil
02e0: 65 6e 61 6d 65 7d 22 20 3d 20 27 2e 27 20 5d 3b ename}" = '.' ];
02f0: 20 74 68 65 6e 0a 09 09 09 63 6f 6e 74 69 6e 75 then....continu
0300: 65 0a 09 09 66 69 0a 0a 09 09 66 69 6c 65 6e 61 e...fi....filena
0310: 6d 65 3d 22 24 28 65 63 68 6f 20 22 24 7b 66 69 me="$(echo "${fi
0320: 6c 65 6e 61 6d 65 7d 22 20 7c 20 73 65 64 20 27 lename}" | sed '
0330: 73 40 5e 5c 2e 2f 40 40 27 20 7c 20 68 65 61 64 s@^\./@@' | head
0340: 20 2d 6e 20 31 29 22 0a 0a 09 09 69 66 20 5b 20 -n 1)"....if [
0350: 21 20 2d 65 20 22 24 7b 66 69 6c 65 6e 61 6d 65 ! -e "${filename
0360: 7d 22 20 5d 3b 20 74 68 65 6e 0a 09 09 09 63 6f }" ]; then....co
0370: 6e 74 69 6e 75 65 0a 09 09 66 69 0a 0a 09 09 69 ntinue...fi....i
0380: 66 20 5b 20 2d 68 20 22 24 7b 66 69 6c 65 6e 61 f [ -h "${filena
0390: 6d 65 7d 22 20 5d 3b 20 74 68 65 6e 0a 09 09 09 me}" ]; then....
03a0: 74 79 70 65 3d 27 73 79 6d 6c 69 6e 6b 27 0a 09 type='symlink'..
03b0: 09 65 6c 69 66 20 5b 20 2d 64 20 22 24 7b 66 69 .elif [ -d "${fi
03c0: 6c 65 6e 61 6d 65 7d 22 20 5d 3b 20 74 68 65 6e lename}" ]; then
03d0: 0a 09 09 09 74 79 70 65 3d 27 64 69 72 65 63 74 ....type='direct
03e0: 6f 72 79 27 0a 09 09 65 6c 69 66 20 5b 20 2d 66 ory'...elif [ -f
03f0: 20 22 24 7b 66 69 6c 65 6e 61 6d 65 7d 22 20 5d "${filename}" ]
0400: 3b 20 74 68 65 6e 0a 09 09 09 74 79 70 65 3d 27 ; then....type='
0410: 66 69 6c 65 27 0a 09 09 65 6c 73 65 0a 09 09 09 file'...else....
0420: 63 6f 6e 74 69 6e 75 65 0a 09 09 66 69 0a 0a 09 continue...fi...
0430: 09 63 61 73 65 20 22 24 7b 74 79 70 65 7d 22 20 .case "${type}"
0440: 69 6e 0a 09 09 09 64 69 72 65 63 74 6f 72 79 29 in....directory)
0450: 0a 09 09 09 09 73 74 61 74 5f 66 6f 72 6d 61 74 .....stat_format
0460: 3d 27 25 59 27 0a 09 09 09 09 65 78 74 72 61 5f ='%Y'.....extra_
0470: 64 61 74 61 3d 27 27 0a 09 09 09 09 3b 3b 0a 09 data=''.....;;..
0480: 09 09 73 79 6d 6c 69 6e 6b 29 0a 09 09 09 09 73 ..symlink).....s
0490: 74 61 74 5f 66 6f 72 6d 61 74 3d 27 25 59 27 0a tat_format='%Y'.
04a0: 09 09 09 09 65 78 74 72 61 5f 64 61 74 61 3d 22 ....extra_data="
04b0: 24 28 72 65 61 64 6c 69 6e 6b 20 22 24 7b 66 69 $(readlink "${fi
04c0: 6c 65 6e 61 6d 65 7d 22 29 22 0a 09 09 09 09 3b lename}")".....;
04d0: 3b 0a 09 09 09 66 69 6c 65 29 0a 09 09 09 09 69 ;....file).....i
04e0: 66 20 5b 20 2d 78 20 22 24 7b 66 69 6c 65 6e 61 f [ -x "${filena
04f0: 6d 65 7d 22 20 5d 3b 20 74 68 65 6e 0a 09 09 09 me}" ]; then....
0500: 09 09 65 78 74 72 61 5f 64 61 74 61 3d 27 78 27 ..extra_data='x'
0510: 0a 09 09 09 09 65 6c 73 65 0a 09 09 09 09 09 65 .....else......e
0520: 78 74 72 61 5f 64 61 74 61 3d 27 27 0a 09 09 09 xtra_data=''....
0530: 09 66 69 0a 0a 09 09 09 09 73 74 61 74 5f 66 6f .fi......stat_fo
0540: 72 6d 61 74 3d 27 25 59 2c 25 73 27 0a 09 09 09 rmat='%Y,%s'....
0550: 09 66 69 6c 65 6e 61 6d 65 5f 68 61 73 68 3d 22 .filename_hash="
0560: 24 28 73 68 61 31 20 22 24 7b 66 69 6c 65 6e 61 $(sha1 "${filena
0570: 6d 65 7d 22 29 22 0a 09 09 09 09 65 78 74 72 61 me}")".....extra
0580: 5f 64 61 74 61 3d 22 24 7b 65 78 74 72 61 5f 64 _data="${extra_d
0590: 61 74 61 7d 2c 24 7b 66 69 6c 65 6e 61 6d 65 5f ata},${filename_
05a0: 68 61 73 68 7d 22 0a 0a 09 09 09 09 66 69 6c 65 hash}"......file
05b0: 6e 61 6d 65 5f 69 6e 74 72 65 65 3d 22 24 7b 61 name_intree="${a
05c0: 70 70 66 73 64 69 72 7d 2f 73 68 61 31 2f 24 7b ppfsdir}/sha1/${
05d0: 66 69 6c 65 6e 61 6d 65 5f 68 61 73 68 7d 22 0a filename_hash}".
05e0: 0a 09 09 09 09 69 66 20 5b 20 21 20 2d 65 20 22 .....if [ ! -e "
05f0: 24 7b 66 69 6c 65 6e 61 6d 65 5f 69 6e 74 72 65 ${filename_intre
0600: 65 7d 22 20 5d 3b 20 74 68 65 6e 0a 09 09 09 09 e}" ]; then.....
0610: 09 63 61 74 20 22 24 7b 66 69 6c 65 6e 61 6d 65 .cat "${filename
0620: 7d 22 20 3e 20 22 24 7b 66 69 6c 65 6e 61 6d 65 }" > "${filename
0630: 5f 69 6e 74 72 65 65 7d 2e 74 6d 70 22 0a 0a 09 _intree}.tmp"...
0640: 09 09 09 09 6d 76 20 22 24 7b 66 69 6c 65 6e 61 ....mv "${filena
0650: 6d 65 5f 69 6e 74 72 65 65 7d 2e 74 6d 70 22 20 me_intree}.tmp"
0660: 22 24 7b 66 69 6c 65 6e 61 6d 65 5f 69 6e 74 72 "${filename_intr
0670: 65 65 7d 22 0a 09 09 09 09 66 69 0a 09 09 09 09 ee}".....fi.....
0680: 3b 3b 0a 09 09 65 73 61 63 0a 09 09 73 74 61 74 ;;...esac...stat
0690: 5f 64 61 74 61 3d 22 24 28 73 74 61 74 20 2d 2d _data="$(stat --
06a0: 66 6f 72 6d 61 74 3d 22 24 7b 73 74 61 74 5f 66 format="${stat_f
06b0: 6f 72 6d 61 74 7d 22 20 22 24 7b 66 69 6c 65 6e ormat}" "${filen
06c0: 61 6d 65 7d 22 29 22 0a 0a 09 09 69 66 20 5b 20 ame}")"....if [
06d0: 2d 7a 20 22 24 7b 65 78 74 72 61 5f 64 61 74 61 -z "${extra_data
06e0: 7d 22 20 5d 3b 20 74 68 65 6e 0a 09 09 09 65 63 }" ]; then....ec
06f0: 68 6f 20 22 24 7b 74 79 70 65 7d 2c 24 7b 73 74 ho "${type},${st
0700: 61 74 5f 64 61 74 61 7d 2c 24 7b 66 69 6c 65 6e at_data},${filen
0710: 61 6d 65 7d 22 0a 09 09 65 6c 73 65 0a 09 09 09 ame}"...else....
0720: 65 63 68 6f 20 22 24 7b 74 79 70 65 7d 2c 24 7b echo "${type},${
0730: 73 74 61 74 5f 64 61 74 61 7d 2c 24 7b 65 78 74 stat_data},${ext
0740: 72 61 5f 64 61 74 61 7d 2c 24 7b 66 69 6c 65 6e ra_data},${filen
0750: 61 6d 65 7d 22 0a 09 09 66 69 0a 09 64 6f 6e 65 ame}"...fi..done
0760: 0a 7d 0a 0a 70 61 63 6b 61 67 65 6c 69 73 74 66 .}..packagelistf
0770: 69 6c 65 3d 22 24 7b 61 70 70 66 73 64 69 72 7d ile="${appfsdir}
0780: 2f 73 68 61 31 2f 24 7b 52 41 4e 44 4f 4d 7d 24 /sha1/${RANDOM}$
0790: 7b 52 41 4e 44 4f 4d 7d 24 7b 52 41 4e 44 4f 4d {RANDOM}${RANDOM
07a0: 7d 24 7b 52 41 4e 44 4f 4d 7d 24 7b 52 41 4e 44 }${RANDOM}${RAND
07b0: 4f 4d 7d 2e 74 6d 70 22 0a 64 65 66 61 75 6c 74 OM}.tmp".default
07c0: 5f 69 73 4c 61 74 65 73 74 3d 27 30 27 0a 0a 63 _isLatest='0'..c
07d0: 61 73 65 20 22 24 7b 6d 6f 64 65 7d 22 20 69 6e ase "${mode}" in
07e0: 0a 09 64 69 72 29 0a 09 09 63 64 20 22 24 7b 70 ..dir)...cd "${p
07f0: 6b 67 73 64 69 72 7d 22 20 7c 7c 20 65 78 69 74 kgsdir}" || exit
0800: 20 31 0a 09 09 3b 3b 0a 09 66 69 6c 65 29 0a 09 1...;;..file)..
0810: 09 6f 6c 64 70 61 63 6b 61 67 65 6c 69 73 74 66 .oldpackagelistf
0820: 69 6c 65 3d 22 24 7b 61 70 70 66 73 64 69 72 7d ile="${appfsdir}
0830: 2f 73 68 61 31 2f 24 28 63 61 74 20 22 24 7b 61 /sha1/$(cat "${a
0840: 70 70 66 73 64 69 72 7d 2f 69 6e 64 65 78 22 20 ppfsdir}/index"
0850: 7c 20 68 65 61 64 20 2d 6e 20 31 20 7c 20 63 75 | head -n 1 | cu
0860: 74 20 2d 66 20 31 20 2d 64 20 27 2c 27 29 22 0a t -f 1 -d ',')".
0870: 0a 09 09 77 6f 72 6b 64 69 72 3d 22 24 7b 61 70 ...workdir="${ap
0880: 70 66 73 64 69 72 7d 2f 2e 77 6f 72 6b 64 69 72 pfsdir}/.workdir
0890: 2d 24 7b 52 41 4e 44 4f 4d 7d 24 7b 52 41 4e 44 -${RANDOM}${RAND
08a0: 4f 4d 7d 24 7b 52 41 4e 44 4f 4d 7d 24 7b 52 41 OM}${RANDOM}${RA
08b0: 4e 44 4f 4d 7d 22 0a 09 09 6d 6b 64 69 72 20 22 NDOM}"...mkdir "
08c0: 24 7b 77 6f 72 6b 64 69 72 7d 22 0a 0a 09 09 63 ${workdir}"....c
08d0: 61 74 20 22 24 7b 70 6b 67 66 69 6c 65 7d 22 20 at "${pkgfile}"
08e0: 7c 20 28 20 63 64 20 22 24 7b 77 6f 72 6b 64 69 | ( cd "${workdi
08f0: 72 7d 22 20 26 26 20 63 70 69 6f 20 2d 69 6d 64 r}" && cpio -imd
0900: 20 29 20 7c 7c 20 65 78 69 74 20 31 0a 09 09 63 ) || exit 1...c
0910: 64 20 22 24 7b 77 6f 72 6b 64 69 72 7d 22 20 7c d "${workdir}" |
0920: 7c 20 65 78 69 74 20 31 0a 0a 09 09 64 69 72 64 | exit 1....dird
0930: 61 74 65 3d 22 24 28 66 69 6e 64 20 2e 20 2d 74 ate="$(find . -t
0940: 79 70 65 20 66 20 2d 70 72 69 6e 74 66 20 27 25 ype f -printf '%
0950: 54 59 25 54 6d 25 54 64 25 54 48 25 54 4d 2e 25 TY%Tm%Td%TH%TM.%
0960: 54 53 5c 6e 27 20 2d 71 75 69 74 20 7c 20 63 75 TS\n' -quit | cu
0970: 74 20 2d 66 20 31 2d 32 20 2d 64 20 27 2e 27 29 t -f 1-2 -d '.')
0980: 22 0a 09 09 66 69 6e 64 20 2e 20 2d 74 79 70 65 "...find . -type
0990: 20 64 20 2d 70 72 69 6e 74 30 20 7c 20 78 61 72 d -print0 | xar
09a0: 67 73 20 2d 30 20 2d 2d 20 74 6f 75 63 68 20 2d gs -0 -- touch -
09b0: 74 20 22 24 7b 64 69 72 64 61 74 65 7d 22 0a 0a t "${dirdate}"..
09c0: 09 09 23 20 49 66 20 74 68 69 73 20 61 72 63 68 ..# If this arch
09d0: 69 76 65 20 63 6f 6e 74 61 69 6e 73 20 65 78 61 ive contains exa
09e0: 63 74 6c 79 20 6f 6e 65 20 70 61 63 6b 61 67 65 ctly one package
09f0: 20 6d 61 72 6b 20 69 74 20 61 73 20 74 68 65 20 mark it as the
0a00: 6c 61 74 65 73 74 20 76 65 72 73 69 6f 6e 0a 09 latest version..
0a10: 09 63 68 6b 5f 70 61 63 6b 61 67 65 3d 22 24 28 .chk_package="$(
0a20: 65 63 68 6f 20 2a 29 22 0a 09 09 69 66 20 5b 20 echo *)"...if [
0a30: 2d 64 20 22 24 7b 63 68 6b 5f 70 61 63 6b 61 67 -d "${chk_packag
0a40: 65 7d 22 20 5d 3b 20 74 68 65 6e 0a 09 09 09 64 e}" ]; then....d
0a50: 65 66 61 75 6c 74 5f 69 73 4c 61 74 65 73 74 3d efault_isLatest=
0a60: 27 31 27 0a 09 09 66 69 0a 0a 09 09 63 61 74 20 '1'...fi....cat
0a70: 22 24 7b 6f 6c 64 70 61 63 6b 61 67 65 6c 69 73 "${oldpackagelis
0a80: 74 66 69 6c 65 7d 22 20 32 3e 2f 64 65 76 2f 6e tfile}" 2>/dev/n
0a90: 75 6c 6c 20 7c 20 28 0a 09 09 09 69 66 20 5b 20 ull | (....if [
0aa0: 2d 64 20 22 24 7b 63 68 6b 5f 70 61 63 6b 61 67 -d "${chk_packag
0ab0: 65 7d 22 20 5d 3b 20 74 68 65 6e 0a 09 09 09 09 e}" ]; then.....
0ac0: 73 65 64 20 27 73 40 5e 5c 28 27 22 7b 63 68 6b sed 's@^\('"{chk
0ad0: 5f 70 61 63 6b 61 67 65 7d 22 27 2c 2e 2a 5c 29 _package}"',.*\)
0ae0: 2c 31 40 5c 31 2c 30 40 27 0a 09 09 09 65 6c 73 ,1@\1,0@'....els
0af0: 65 0a 09 09 09 09 63 61 74 0a 09 09 09 66 69 0a e.....cat....fi.
0b00: 09 09 29 20 3e 20 22 24 7b 70 61 63 6b 61 67 65 ..) > "${package
0b10: 6c 69 73 74 66 69 6c 65 7d 22 0a 0a 09 09 3b 3b listfile}"....;;
0b20: 0a 65 73 61 63 0a 0a 66 6f 72 20 70 61 63 6b 61 .esac..for packa
0b30: 67 65 20 69 6e 20 2a 3b 20 64 6f 0a 09 69 66 20 ge in *; do..if
0b40: 5b 20 21 20 2d 64 20 22 24 7b 70 61 63 6b 61 67 [ ! -d "${packag
0b50: 65 7d 22 20 5d 3b 20 74 68 65 6e 0a 09 09 63 6f e}" ]; then...co
0b60: 6e 74 69 6e 75 65 0a 09 66 69 0a 0a 09 28 0a 09 ntinue..fi...(..
0b70: 09 63 64 20 22 24 7b 70 61 63 6b 61 67 65 7d 22 .cd "${package}"
0b80: 20 7c 7c 20 65 78 69 74 20 31 0a 0a 09 09 66 6f || exit 1....fo
0b90: 72 20 6f 73 5f 63 70 75 41 72 63 68 20 69 6e 20 r os_cpuArch in
0ba0: 2a 3b 20 64 6f 0a 09 09 09 6f 73 3d 22 24 28 65 *; do....os="$(e
0bb0: 63 68 6f 20 22 24 7b 6f 73 5f 63 70 75 41 72 63 cho "${os_cpuArc
0bc0: 68 7d 22 20 7c 20 63 75 74 20 2d 66 20 31 20 2d h}" | cut -f 1 -
0bd0: 64 20 27 2d 27 29 22 0a 09 09 09 63 70 75 41 72 d '-')"....cpuAr
0be0: 63 68 3d 22 24 28 65 63 68 6f 20 22 24 7b 6f 73 ch="$(echo "${os
0bf0: 5f 63 70 75 41 72 63 68 7d 22 20 7c 20 63 75 74 _cpuArch}" | cut
0c00: 20 2d 66 20 32 2d 20 2d 64 20 27 2d 27 29 22 0a -f 2- -d '-')".
0c10: 0a 09 09 09 28 0a 09 09 09 09 63 64 20 22 24 7b ....(.....cd "${
0c20: 6f 73 5f 63 70 75 41 72 63 68 7d 22 20 7c 7c 20 os_cpuArch}" ||
0c30: 65 78 69 74 20 31 0a 0a 09 09 09 09 66 6f 72 20 exit 1......for
0c40: 76 65 72 73 69 6f 6e 20 69 6e 20 2a 3b 20 64 6f version in *; do
0c50: 0a 09 09 09 09 09 69 66 20 5b 20 2d 68 20 22 24 ......if [ -h "$
0c60: 7b 76 65 72 73 69 6f 6e 7d 22 20 5d 3b 20 74 68 {version}" ]; th
0c70: 65 6e 0a 09 09 09 09 09 09 63 6f 6e 74 69 6e 75 en.......continu
0c80: 65 0a 09 09 09 09 09 66 69 0a 0a 09 09 09 09 09 e......fi.......
0c90: 6d 61 6e 69 66 65 73 74 66 69 6c 65 3d 22 24 7b manifestfile="${
0ca0: 61 70 70 66 73 64 69 72 7d 2f 73 68 61 31 2f 24 appfsdir}/sha1/$
0cb0: 7b 52 41 4e 44 4f 4d 7d 24 7b 52 41 4e 44 4f 4d {RANDOM}${RANDOM
0cc0: 7d 24 7b 52 41 4e 44 4f 4d 7d 24 7b 52 41 4e 44 }${RANDOM}${RAND
0cd0: 4f 4d 7d 24 7b 52 41 4e 44 4f 4d 7d 2e 74 6d 70 OM}${RANDOM}.tmp
0ce0: 22 0a 0a 09 09 09 09 09 28 0a 09 09 09 09 09 09 ".......(.......
0cf0: 63 64 20 22 24 7b 76 65 72 73 69 6f 6e 7d 22 20 cd "${version}"
0d00: 7c 7c 20 65 78 69 74 20 31 0a 0a 09 09 09 09 09 || exit 1.......
0d10: 09 65 63 68 6f 20 22 23 6d 61 6e 69 66 65 73 74 .echo "#manifest
0d20: 6d 65 74 61 64 61 74 61 2c 24 7b 70 61 63 6b 61 metadata,${packa
0d30: 67 65 7d 2c 24 7b 6f 73 7d 2c 24 7b 63 70 75 41 ge},${os},${cpuA
0d40: 72 63 68 7d 2c 24 7b 76 65 72 73 69 6f 6e 7d 22 rch},${version}"
0d50: 0a 09 09 09 09 09 09 65 6d 69 74 5f 6d 61 6e 69 .......emit_mani
0d60: 66 65 73 74 0a 09 09 09 09 09 29 20 3e 20 22 24 fest......) > "$
0d70: 7b 6d 61 6e 69 66 65 73 74 66 69 6c 65 7d 22 0a {manifestfile}".
0d80: 0a 09 09 09 09 09 6d 61 6e 69 66 65 73 74 66 69 ......manifestfi
0d90: 6c 65 5f 68 61 73 68 3d 22 24 28 73 68 61 31 20 le_hash="$(sha1
0da0: 22 24 7b 6d 61 6e 69 66 65 73 74 66 69 6c 65 7d "${manifestfile}
0db0: 22 29 22 0a 09 09 09 09 09 6d 76 20 22 24 7b 6d ")"......mv "${m
0dc0: 61 6e 69 66 65 73 74 66 69 6c 65 7d 22 20 22 24 anifestfile}" "$
0dd0: 7b 61 70 70 66 73 64 69 72 7d 2f 73 68 61 31 2f {appfsdir}/sha1/
0de0: 24 7b 6d 61 6e 69 66 65 73 74 66 69 6c 65 5f 68 ${manifestfile_h
0df0: 61 73 68 7d 22 0a 0a 09 09 09 09 09 23 20 58 58 ash}".......# XX
0e00: 58 3a 54 4f 44 4f 3a 20 44 65 74 65 72 6d 69 6e X:TODO: Determin
0e10: 65 20 69 66 20 74 68 69 73 20 69 73 20 74 68 65 e if this is the
0e20: 20 6c 61 74 65 73 74 20 76 65 72 73 69 6f 6e 0a latest version.
0e30: 09 09 09 09 09 69 73 4c 61 74 65 73 74 3d 22 24 .....isLatest="$
0e40: 7b 64 65 66 61 75 6c 74 5f 69 73 4c 61 74 65 73 {default_isLates
0e50: 74 3a 2d 30 7d 22 0a 0a 09 09 09 09 09 65 63 68 t:-0}".......ech
0e60: 6f 20 22 24 7b 70 61 63 6b 61 67 65 7d 2c 24 7b o "${package},${
0e70: 76 65 72 73 69 6f 6e 7d 2c 24 7b 6f 73 7d 2c 24 version},${os},$
0e80: 7b 63 70 75 41 72 63 68 7d 2c 24 7b 6d 61 6e 69 {cpuArch},${mani
0e90: 66 65 73 74 66 69 6c 65 5f 68 61 73 68 7d 2c 24 festfile_hash},$
0ea0: 7b 69 73 4c 61 74 65 73 74 7d 22 0a 09 09 09 09 {isLatest}".....
0eb0: 64 6f 6e 65 0a 0a 09 09 09 29 0a 09 09 64 6f 6e done.....)...don
0ec0: 65 0a 09 29 0a 64 6f 6e 65 20 3e 3e 20 22 24 7b e..).done >> "${
0ed0: 70 61 63 6b 61 67 65 6c 69 73 74 66 69 6c 65 7d packagelistfile}
0ee0: 22 0a 0a 23 20 45 6e 73 75 72 65 20 70 61 63 6b "..# Ensure pack
0ef0: 61 67 65 20 6c 69 73 74 20 66 69 6c 65 20 64 6f age list file do
0f00: 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 64 es not contain d
0f10: 75 70 6c 69 63 61 74 65 20 76 65 72 73 69 6f 6e uplicate version
0f20: 73 0a 63 61 74 20 22 24 7b 70 61 63 6b 61 67 65 s.cat "${package
0f30: 6c 69 73 74 66 69 6c 65 7d 22 20 7c 20 61 77 6b listfile}" | awk
0f40: 20 2d 46 20 27 2c 27 20 27 0a 09 7b 0a 09 09 70 -F ',' '..{...p
0f50: 61 63 6b 61 67 65 20 3d 20 24 31 3b 0a 09 09 76 ackage = $1;...v
0f60: 65 72 73 69 6f 6e 20 3d 20 24 32 3b 0a 09 09 6f ersion = $2;...o
0f70: 73 20 3d 20 24 33 3b 0a 09 09 63 70 75 41 72 63 s = $3;...cpuArc
0f80: 68 20 3d 20 24 34 3b 0a 09 09 68 61 73 68 20 3d h = $4;...hash =
0f90: 20 24 35 3b 0a 09 09 69 73 4c 61 74 65 73 74 20 $5;...isLatest
0fa0: 3d 20 24 36 3b 0a 0a 09 09 6b 65 79 20 3d 20 70 = $6;....key = p
0fb0: 61 63 6b 61 67 65 20 22 2c 22 20 76 65 72 73 69 ackage "," versi
0fc0: 6f 6e 20 22 2c 22 20 6f 73 20 22 2c 22 20 63 70 on "," os "," cp
0fd0: 75 41 72 63 68 3b 0a 0a 09 09 69 66 20 28 69 73 uArch;....if (is
0fe0: 4c 61 74 65 73 74 20 3d 3d 20 22 31 22 29 20 7b Latest == "1") {
0ff0: 0a 09 09 09 6b 65 79 73 5f 6c 61 74 65 73 74 5b ....keys_latest[
1000: 6b 65 79 5d 20 3d 20 68 61 73 68 3b 0a 09 09 7d key] = hash;...}
1010: 0a 09 09 6b 65 79 73 5b 6b 65 79 5d 20 3d 20 68 ...keys[key] = h
1020: 61 73 68 3b 0a 09 7d 0a 0a 09 45 4e 44 7b 0a 09 ash;..}...END{..
1030: 09 66 6f 72 20 28 6b 65 79 20 69 6e 20 6b 65 79 .for (key in key
1040: 73 29 20 7b 0a 09 09 09 69 66 20 28 6b 65 79 73 s) {....if (keys
1050: 5f 6c 61 74 65 73 74 5b 6b 65 79 5d 20 21 3d 20 _latest[key] !=
1060: 22 22 29 20 7b 0a 09 09 09 09 69 73 4c 61 74 65 "") {.....isLate
1070: 73 74 20 3d 20 22 31 22 3b 0a 09 09 09 09 68 61 st = "1";.....ha
1080: 73 68 20 3d 20 6b 65 79 73 5f 6c 61 74 65 73 74 sh = keys_latest
1090: 5b 6b 65 79 5d 3b 0a 09 09 09 7d 20 65 6c 73 65 [key];....} else
10a0: 20 7b 0a 09 09 09 09 69 73 4c 61 74 65 73 74 20 {.....isLatest
10b0: 3d 20 22 30 22 3b 0a 09 09 09 09 68 61 73 68 20 = "0";.....hash
10c0: 3d 20 6b 65 79 73 5b 6b 65 79 5d 3b 0a 09 09 09 = keys[key];....
10d0: 7d 0a 0a 09 09 09 70 72 69 6e 74 20 6b 65 79 20 }.....print key
10e0: 22 2c 22 20 68 61 73 68 20 22 2c 22 20 69 73 4c "," hash "," isL
10f0: 61 74 65 73 74 3b 0a 09 09 7d 0a 09 7d 20 20 0a atest;...}..} .
1100: 27 20 7c 20 73 6f 72 74 20 2d 75 20 3e 20 22 24 ' | sort -u > "$
1110: 7b 70 61 63 6b 61 67 65 6c 69 73 74 66 69 6c 65 {packagelistfile
1120: 7d 2e 6e 65 77 22 0a 63 61 74 20 22 24 7b 70 61 }.new".cat "${pa
1130: 63 6b 61 67 65 6c 69 73 74 66 69 6c 65 7d 2e 6e ckagelistfile}.n
1140: 65 77 22 20 3e 20 22 24 7b 70 61 63 6b 61 67 65 ew" > "${package
1150: 6c 69 73 74 66 69 6c 65 7d 22 0a 72 6d 20 2d 66 listfile}".rm -f
1160: 20 22 24 7b 70 61 63 6b 61 67 65 6c 69 73 74 66 "${packagelistf
1170: 69 6c 65 7d 2e 6e 65 77 22 0a 0a 70 61 63 6b 61 ile}.new"..packa
1180: 67 65 6c 69 73 74 66 69 6c 65 5f 68 61 73 68 3d gelistfile_hash=
1190: 22 24 28 73 68 61 31 20 22 24 7b 70 61 63 6b 61 "$(sha1 "${packa
11a0: 67 65 6c 69 73 74 66 69 6c 65 7d 22 29 22 0a 6d gelistfile}")".m
11b0: 76 20 22 24 7b 70 61 63 6b 61 67 65 6c 69 73 74 v "${packagelist
11c0: 66 69 6c 65 7d 22 20 22 24 7b 61 70 70 66 73 64 file}" "${appfsd
11d0: 69 72 7d 2f 73 68 61 31 2f 24 7b 70 61 63 6b 61 ir}/sha1/${packa
11e0: 67 65 6c 69 73 74 66 69 6c 65 5f 68 61 73 68 7d gelistfile_hash}
11f0: 22 0a 0a 69 66 20 5b 20 2d 6e 20 22 24 41 50 50 "..if [ -n "$APP
1200: 46 53 5f 53 49 47 4e 5f 49 4e 5f 50 4c 41 43 45 FS_SIGN_IN_PLACE
1210: 22 20 5d 3b 20 74 68 65 6e 0a 09 69 6e 64 65 78 " ]; then..index
1220: 66 69 6c 65 3d 22 24 7b 61 70 70 66 73 64 69 72 file="${appfsdir
1230: 7d 2f 69 6e 64 65 78 22 0a 65 6c 73 65 0a 09 69 }/index".else..i
1240: 6e 64 65 78 66 69 6c 65 3d 22 24 7b 61 70 70 66 ndexfile="${appf
1250: 73 64 69 72 7d 2f 69 6e 64 65 78 2e 6e 65 77 22 sdir}/index.new"
1260: 0a 66 69 0a 0a 65 63 68 6f 20 22 24 7b 70 61 63 .fi..echo "${pac
1270: 6b 61 67 65 6c 69 73 74 66 69 6c 65 5f 68 61 73 kagelistfile_has
1280: 68 7d 2c 73 68 61 31 22 20 3e 20 22 24 7b 69 6e h},sha1" > "${in
1290: 64 65 78 66 69 6c 65 7d 22 0a 0a 69 66 20 5b 20 dexfile}"..if [
12a0: 2d 78 20 22 24 28 77 68 69 63 68 20 27 61 70 70 -x "$(which 'app
12b0: 66 73 2d 63 65 72 74 27 20 32 3e 2f 64 65 76 2f fs-cert' 2>/dev/
12c0: 6e 75 6c 6c 29 22 5d 3b 20 74 68 65 6e 0a 09 61 null)"]; then..a
12d0: 70 70 66 73 2d 63 65 72 74 20 73 69 67 6e 2d 73 ppfs-cert sign-s
12e0: 69 74 65 20 22 24 7b 69 6e 64 65 78 66 69 6c 65 ite "${indexfile
12f0: 7d 22 20 22 24 40 22 0a 66 69 0a 0a 69 66 20 5b }" "$@".fi..if [
1300: 20 2d 7a 20 22 24 41 50 50 46 53 5f 53 49 47 4e -z "$APPFS_SIGN
1310: 5f 49 4e 5f 50 4c 41 43 45 22 20 5d 3b 20 74 68 _IN_PLACE" ]; th
1320: 65 6e 0a 09 6d 76 20 22 24 7b 69 6e 64 65 78 66 en..mv "${indexf
1330: 69 6c 65 7d 22 20 22 24 7b 61 70 70 66 73 64 69 ile}" "${appfsdi
1340: 72 7d 2f 69 6e 64 65 78 22 0a 66 69 0a 0a 63 61 r}/index".fi..ca
1350: 73 65 20 22 24 7b 6d 6f 64 65 7d 22 20 69 6e 0a se "${mode}" in.
1360: 09 66 69 6c 65 29 0a 09 09 63 64 20 2f 0a 09 09 .file)...cd /...
1370: 72 6d 20 2d 72 66 20 22 24 7b 77 6f 72 6b 64 69 rm -rf "${workdi
1380: 72 7d 22 0a 09 09 3b 3b 0a 65 73 61 63 0a r}"...;;.esac.