Hex Artifact Content

Artifact 7f99548475fce315d8a8ce5c173ba6d4cb33bbbe:


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 69 66 20 5b 20 22 24 31 22 20  bash..if [ "$1" 
0020: 3d 3d 20 27 2d 2d 63 70 69 6f 27 20 5d 3b 20 74  == '--cpio' ]; t
0030: 68 65 6e 0a 09 6d 6f 64 65 3d 27 66 69 6c 65 27  hen..mode='file'
0040: 0a 0a 09 70 6b 67 66 69 6c 65 3d 22 24 31 22 0a  ...pkgfile="$1".
0050: 65 6c 73 65 0a 09 6d 6f 64 65 3d 27 64 69 72 27  else..mode='dir'
0060: 0a 0a 09 70 6b 67 73 64 69 72 3d 22 24 31 22 0a  ...pkgsdir="$1".
0070: 66 69 0a 61 70 70 66 73 64 69 72 3d 22 24 32 22  fi.appfsdir="$2"
0080: 0a 0a 69 66 20 5b 20 2d 7a 20 22 24 7b 70 6b 67  ..if [ -z "${pkg
0090: 73 64 69 72 7d 22 20 2d 61 20 2d 7a 20 22 24 7b  sdir}" -a -z "${
00a0: 70 6b 67 66 69 6c 65 7d 22 20 5d 20 7c 7c 20 5b  pkgfile}" ] || [
00b0: 20 2d 7a 20 22 24 7b 61 70 70 66 73 64 69 72 7d   -z "${appfsdir}
00c0: 22 20 5d 3b 20 74 68 65 6e 0a 09 65 63 68 6f 20  " ]; then..echo 
00d0: 27 55 73 61 67 65 3a 20 61 70 70 66 73 2d 6d 6b  'Usage: appfs-mk
00e0: 20 7b 2d 2d 63 70 69 6f 20 3c 70 6b 67 66 69 6c   {--cpio <pkgfil
00f0: 65 3e 7c 3c 70 6b 67 73 64 69 72 3e 7d 20 3c 61  e>|<pkgsdir>} <a
0100: 70 70 66 73 64 69 72 3e 27 20 3e 26 32 0a 0a 09  ppfsdir>' >&2...
0110: 65 78 69 74 20 31 0a 66 69 0a 0a 61 70 70 66 73  exit 1.fi..appfs
0120: 64 69 72 3d 22 24 28 63 64 20 22 24 7b 61 70 70  dir="$(cd "${app
0130: 66 73 64 69 72 7d 22 20 26 26 20 70 77 64 29 22  fsdir}" && pwd)"
0140: 0a 69 66 20 5b 20 2d 7a 20 22 24 7b 61 70 70 66  .if [ -z "${appf
0150: 73 64 69 72 7d 22 20 5d 3b 20 74 68 65 6e 0a 09  sdir}" ]; then..
0160: 65 63 68 6f 20 22 55 6e 61 62 6c 65 20 74 6f 20  echo "Unable to 
0170: 66 69 6e 64 20 61 70 70 66 73 20 64 69 72 65 63  find appfs direc
0180: 74 6f 72 79 2e 22 20 3e 26 32 0a 0a 09 65 78 69  tory." >&2...exi
0190: 74 20 31 0a 66 69 0a 0a 6d 6b 64 69 72 20 2d 70  t 1.fi..mkdir -p
01a0: 20 22 24 7b 61 70 70 66 73 64 69 72 7d 2f 73 68   "${appfsdir}/sh
01b0: 61 31 22 0a 0a 66 75 6e 63 74 69 6f 6e 20 73 68  a1"..function sh
01c0: 61 31 28 29 20 7b 0a 09 6c 6f 63 61 6c 20 66 69  a1() {..local fi
01d0: 6c 65 6e 61 6d 65 0a 0a 09 66 69 6c 65 6e 61 6d  lename...filenam
01e0: 65 3d 22 24 31 22 0a 0a 09 6f 70 65 6e 73 73 6c  e="$1"...openssl
01f0: 20 73 68 61 31 20 22 24 7b 66 69 6c 65 6e 61 6d   sha1 "${filenam
0200: 65 7d 22 20 7c 20 73 65 64 20 27 73 40 2e 2a 3d  e}" | sed 's@.*=
0210: 20 40 40 27 0a 7d 0a 0a 66 75 6e 63 74 69 6f 6e   @@'.}..function
0220: 20 65 6d 69 74 5f 6d 61 6e 69 66 65 73 74 28 29   emit_manifest()
0230: 20 7b 0a 09 66 69 6e 64 20 2e 20 2d 70 72 69 6e   {..find . -prin
0240: 74 30 20 7c 20 77 68 69 6c 65 20 49 46 53 3d 27  t0 | while IFS='
0250: 27 20 72 65 61 64 20 2d 72 20 2d 64 20 24 27 5c  ' read -r -d $'\
0260: 30 27 20 66 69 6c 65 6e 61 6d 65 3b 20 64 6f 0a  0' filename; do.
0270: 09 09 69 66 20 5b 20 22 24 7b 66 69 6c 65 6e 61  ..if [ "${filena
0280: 6d 65 7d 22 20 3d 20 27 2e 27 20 5d 3b 20 74 68  me}" = '.' ]; th
0290: 65 6e 0a 09 09 09 63 6f 6e 74 69 6e 75 65 0a 09  en....continue..
02a0: 09 66 69 0a 0a 09 09 66 69 6c 65 6e 61 6d 65 3d  .fi....filename=
02b0: 22 24 28 65 63 68 6f 20 22 24 7b 66 69 6c 65 6e  "$(echo "${filen
02c0: 61 6d 65 7d 22 20 7c 20 73 65 64 20 27 73 40 5e  ame}" | sed 's@^
02d0: 5c 2e 2f 40 40 27 20 7c 20 68 65 61 64 20 2d 6e  \./@@' | head -n
02e0: 20 31 29 22 0a 0a 09 09 69 66 20 5b 20 21 20 2d   1)"....if [ ! -
02f0: 65 20 22 24 7b 66 69 6c 65 6e 61 6d 65 7d 22 20  e "${filename}" 
0300: 5d 3b 20 74 68 65 6e 0a 09 09 09 63 6f 6e 74 69  ]; then....conti
0310: 6e 75 65 0a 09 09 66 69 0a 0a 09 09 69 66 20 5b  nue...fi....if [
0320: 20 2d 68 20 22 24 7b 66 69 6c 65 6e 61 6d 65 7d   -h "${filename}
0330: 22 20 5d 3b 20 74 68 65 6e 0a 09 09 09 74 79 70  " ]; then....typ
0340: 65 3d 27 73 79 6d 6c 69 6e 6b 27 0a 09 09 65 6c  e='symlink'...el
0350: 69 66 20 5b 20 2d 64 20 22 24 7b 66 69 6c 65 6e  if [ -d "${filen
0360: 61 6d 65 7d 22 20 5d 3b 20 74 68 65 6e 0a 09 09  ame}" ]; then...
0370: 09 74 79 70 65 3d 27 64 69 72 65 63 74 6f 72 79  .type='directory
0380: 27 0a 09 09 65 6c 69 66 20 5b 20 2d 66 20 22 24  '...elif [ -f "$
0390: 7b 66 69 6c 65 6e 61 6d 65 7d 22 20 5d 3b 20 74  {filename}" ]; t
03a0: 68 65 6e 0a 09 09 09 74 79 70 65 3d 27 66 69 6c  hen....type='fil
03b0: 65 27 0a 09 09 65 6c 73 65 0a 09 09 09 63 6f 6e  e'...else....con
03c0: 74 69 6e 75 65 0a 09 09 66 69 0a 0a 09 09 63 61  tinue...fi....ca
03d0: 73 65 20 22 24 7b 74 79 70 65 7d 22 20 69 6e 0a  se "${type}" in.
03e0: 09 09 09 64 69 72 65 63 74 6f 72 79 29 0a 09 09  ...directory)...
03f0: 09 09 73 74 61 74 5f 66 6f 72 6d 61 74 3d 27 25  ..stat_format='%
0400: 59 27 0a 09 09 09 09 65 78 74 72 61 5f 64 61 74  Y'.....extra_dat
0410: 61 3d 27 27 0a 09 09 09 09 3b 3b 0a 09 09 09 73  a=''.....;;....s
0420: 79 6d 6c 69 6e 6b 29 0a 09 09 09 09 73 74 61 74  ymlink).....stat
0430: 5f 66 6f 72 6d 61 74 3d 27 25 59 27 0a 09 09 09  _format='%Y'....
0440: 09 65 78 74 72 61 5f 64 61 74 61 3d 22 24 28 72  .extra_data="$(r
0450: 65 61 64 6c 69 6e 6b 20 22 24 7b 66 69 6c 65 6e  eadlink "${filen
0460: 61 6d 65 7d 22 29 22 0a 09 09 09 09 3b 3b 0a 09  ame}")".....;;..
0470: 09 09 66 69 6c 65 29 0a 09 09 09 09 69 66 20 5b  ..file).....if [
0480: 20 2d 78 20 22 24 7b 66 69 6c 65 6e 61 6d 65 7d   -x "${filename}
0490: 22 20 5d 3b 20 74 68 65 6e 0a 09 09 09 09 09 65  " ]; then......e
04a0: 78 74 72 61 5f 64 61 74 61 3d 27 78 27 0a 09 09  xtra_data='x'...
04b0: 09 09 65 6c 73 65 0a 09 09 09 09 09 65 78 74 72  ..else......extr
04c0: 61 5f 64 61 74 61 3d 27 27 0a 09 09 09 09 66 69  a_data=''.....fi
04d0: 0a 0a 09 09 09 09 73 74 61 74 5f 66 6f 72 6d 61  ......stat_forma
04e0: 74 3d 27 25 59 2c 25 73 27 0a 09 09 09 09 66 69  t='%Y,%s'.....fi
04f0: 6c 65 6e 61 6d 65 5f 68 61 73 68 3d 22 24 28 73  lename_hash="$(s
0500: 68 61 31 20 22 24 7b 66 69 6c 65 6e 61 6d 65 7d  ha1 "${filename}
0510: 22 29 22 0a 09 09 09 09 65 78 74 72 61 5f 64 61  ")".....extra_da
0520: 74 61 3d 22 24 7b 65 78 74 72 61 5f 64 61 74 61  ta="${extra_data
0530: 7d 2c 24 7b 66 69 6c 65 6e 61 6d 65 5f 68 61 73  },${filename_has
0540: 68 7d 22 0a 0a 09 09 09 09 66 69 6c 65 6e 61 6d  h}"......filenam
0550: 65 5f 69 6e 74 72 65 65 3d 22 24 7b 61 70 70 66  e_intree="${appf
0560: 73 64 69 72 7d 2f 73 68 61 31 2f 24 7b 66 69 6c  sdir}/sha1/${fil
0570: 65 6e 61 6d 65 5f 68 61 73 68 7d 22 0a 0a 09 09  ename_hash}"....
0580: 09 09 69 66 20 5b 20 21 20 2d 65 20 22 24 7b 66  ..if [ ! -e "${f
0590: 69 6c 65 6e 61 6d 65 5f 69 6e 74 72 65 65 7d 22  ilename_intree}"
05a0: 20 5d 3b 20 74 68 65 6e 0a 09 09 09 09 09 63 61   ]; then......ca
05b0: 74 20 22 24 7b 66 69 6c 65 6e 61 6d 65 7d 22 20  t "${filename}" 
05c0: 3e 20 22 24 7b 66 69 6c 65 6e 61 6d 65 5f 69 6e  > "${filename_in
05d0: 74 72 65 65 7d 2e 74 6d 70 22 0a 0a 09 09 09 09  tree}.tmp"......
05e0: 09 6d 76 20 22 24 7b 66 69 6c 65 6e 61 6d 65 5f  .mv "${filename_
05f0: 69 6e 74 72 65 65 7d 2e 74 6d 70 22 20 22 24 7b  intree}.tmp" "${
0600: 66 69 6c 65 6e 61 6d 65 5f 69 6e 74 72 65 65 7d  filename_intree}
0610: 22 0a 09 09 09 09 66 69 0a 09 09 09 09 3b 3b 0a  ".....fi.....;;.
0620: 09 09 65 73 61 63 0a 09 09 73 74 61 74 5f 64 61  ..esac...stat_da
0630: 74 61 3d 22 24 28 73 74 61 74 20 2d 2d 66 6f 72  ta="$(stat --for
0640: 6d 61 74 3d 22 24 7b 73 74 61 74 5f 66 6f 72 6d  mat="${stat_form
0650: 61 74 7d 22 20 22 24 7b 66 69 6c 65 6e 61 6d 65  at}" "${filename
0660: 7d 22 29 22 0a 0a 09 09 69 66 20 5b 20 2d 7a 20  }")"....if [ -z 
0670: 22 24 7b 65 78 74 72 61 5f 64 61 74 61 7d 22 20  "${extra_data}" 
0680: 5d 3b 20 74 68 65 6e 0a 09 09 09 65 63 68 6f 20  ]; then....echo 
0690: 22 24 7b 74 79 70 65 7d 2c 24 7b 73 74 61 74 5f  "${type},${stat_
06a0: 64 61 74 61 7d 2c 24 7b 66 69 6c 65 6e 61 6d 65  data},${filename
06b0: 7d 22 0a 09 09 65 6c 73 65 0a 09 09 09 65 63 68  }"...else....ech
06c0: 6f 20 22 24 7b 74 79 70 65 7d 2c 24 7b 73 74 61  o "${type},${sta
06d0: 74 5f 64 61 74 61 7d 2c 24 7b 65 78 74 72 61 5f  t_data},${extra_
06e0: 64 61 74 61 7d 2c 24 7b 66 69 6c 65 6e 61 6d 65  data},${filename
06f0: 7d 22 0a 09 09 66 69 0a 09 64 6f 6e 65 0a 7d 0a  }"...fi..done.}.
0700: 0a 63 61 73 65 20 22 24 7b 6d 6f 64 65 7d 22 20  .case "${mode}" 
0710: 69 6e 0a 09 64 69 72 29 0a 09 09 63 64 20 22 24  in..dir)...cd "$
0720: 7b 70 6b 67 73 64 69 72 7d 22 20 7c 7c 20 65 78  {pkgsdir}" || ex
0730: 69 74 20 31 0a 09 09 3b 3b 0a 09 66 69 6c 65 29  it 1...;;..file)
0740: 0a 09 09 65 63 68 6f 20 27 55 6e 73 75 70 70 6f  ...echo 'Unsuppo
0750: 72 74 65 64 27 20 3e 26 32 0a 09 09 65 78 69 74  rted' >&2...exit
0760: 20 31 0a 09 09 3b 3b 0a 65 73 61 63 0a 0a 70 61   1...;;.esac..pa
0770: 63 6b 61 67 65 6c 69 73 74 66 69 6c 65 3d 22 24  ckagelistfile="$
0780: 7b 61 70 70 66 73 64 69 72 7d 2f 73 68 61 31 2f  {appfsdir}/sha1/
0790: 24 7b 52 41 4e 44 4f 4d 7d 24 7b 52 41 4e 44 4f  ${RANDOM}${RANDO
07a0: 4d 7d 24 7b 52 41 4e 44 4f 4d 7d 24 7b 52 41 4e  M}${RANDOM}${RAN
07b0: 44 4f 4d 7d 24 7b 52 41 4e 44 4f 4d 7d 2e 74 6d  DOM}${RANDOM}.tm
07c0: 70 22 0a 66 6f 72 20 70 61 63 6b 61 67 65 20 69  p".for package i
07d0: 6e 20 2a 3b 20 64 6f 0a 09 28 0a 09 09 63 64 20  n *; do..(...cd 
07e0: 22 24 7b 70 61 63 6b 61 67 65 7d 22 20 7c 7c 20  "${package}" || 
07f0: 65 78 69 74 20 31 0a 0a 09 09 66 6f 72 20 6f 73  exit 1....for os
0800: 5f 63 70 75 41 72 63 68 20 69 6e 20 2a 3b 20 64  _cpuArch in *; d
0810: 6f 0a 09 09 09 6f 73 3d 22 24 28 65 63 68 6f 20  o....os="$(echo 
0820: 22 24 7b 6f 73 5f 63 70 75 41 72 63 68 7d 22 20  "${os_cpuArch}" 
0830: 7c 20 63 75 74 20 2d 66 20 31 20 2d 64 20 27 2d  | cut -f 1 -d '-
0840: 27 29 22 0a 09 09 09 63 70 75 41 72 63 68 3d 22  ')"....cpuArch="
0850: 24 28 65 63 68 6f 20 22 24 7b 6f 73 5f 63 70 75  $(echo "${os_cpu
0860: 41 72 63 68 7d 22 20 7c 20 63 75 74 20 2d 66 20  Arch}" | cut -f 
0870: 32 2d 20 2d 64 20 27 2d 27 29 22 0a 0a 09 09 09  2- -d '-')".....
0880: 28 0a 09 09 09 09 63 64 20 22 24 7b 6f 73 5f 63  (.....cd "${os_c
0890: 70 75 41 72 63 68 7d 22 20 7c 7c 20 65 78 69 74  puArch}" || exit
08a0: 20 31 0a 0a 09 09 09 09 66 6f 72 20 76 65 72 73   1......for vers
08b0: 69 6f 6e 20 69 6e 20 2a 3b 20 64 6f 0a 09 09 09  ion in *; do....
08c0: 09 09 69 66 20 5b 20 2d 68 20 22 24 7b 76 65 72  ..if [ -h "${ver
08d0: 73 69 6f 6e 7d 22 20 5d 3b 20 74 68 65 6e 0a 09  sion}" ]; then..
08e0: 09 09 09 09 09 63 6f 6e 74 69 6e 75 65 0a 09 09  .....continue...
08f0: 09 09 09 66 69 0a 0a 09 09 09 09 09 6d 61 6e 69  ...fi.......mani
0900: 66 65 73 74 66 69 6c 65 3d 22 24 7b 61 70 70 66  festfile="${appf
0910: 73 64 69 72 7d 2f 73 68 61 31 2f 24 7b 52 41 4e  sdir}/sha1/${RAN
0920: 44 4f 4d 7d 24 7b 52 41 4e 44 4f 4d 7d 24 7b 52  DOM}${RANDOM}${R
0930: 41 4e 44 4f 4d 7d 24 7b 52 41 4e 44 4f 4d 7d 24  ANDOM}${RANDOM}$
0940: 7b 52 41 4e 44 4f 4d 7d 2e 74 6d 70 22 0a 0a 09  {RANDOM}.tmp"...
0950: 09 09 09 09 28 0a 09 09 09 09 09 09 63 64 20 22  ....(.......cd "
0960: 24 7b 76 65 72 73 69 6f 6e 7d 22 20 7c 7c 20 65  ${version}" || e
0970: 78 69 74 20 31 0a 0a 09 09 09 09 09 09 65 63 68  xit 1........ech
0980: 6f 20 22 23 6d 61 6e 69 66 65 73 74 6d 65 74 61  o "#manifestmeta
0990: 64 61 74 61 2c 24 7b 70 61 63 6b 61 67 65 7d 2c  data,${package},
09a0: 24 7b 6f 73 7d 2c 24 7b 63 70 75 41 72 63 68 7d  ${os},${cpuArch}
09b0: 2c 24 7b 76 65 72 73 69 6f 6e 7d 22 0a 09 09 09  ,${version}"....
09c0: 09 09 09 65 6d 69 74 5f 6d 61 6e 69 66 65 73 74  ...emit_manifest
09d0: 0a 09 09 09 09 09 29 20 3e 20 22 24 7b 6d 61 6e  ......) > "${man
09e0: 69 66 65 73 74 66 69 6c 65 7d 22 0a 0a 09 09 09  ifestfile}".....
09f0: 09 09 6d 61 6e 69 66 65 73 74 66 69 6c 65 5f 68  ..manifestfile_h
0a00: 61 73 68 3d 22 24 28 73 68 61 31 20 22 24 7b 6d  ash="$(sha1 "${m
0a10: 61 6e 69 66 65 73 74 66 69 6c 65 7d 22 29 22 0a  anifestfile}")".
0a20: 09 09 09 09 09 6d 76 20 22 24 7b 6d 61 6e 69 66  .....mv "${manif
0a30: 65 73 74 66 69 6c 65 7d 22 20 22 24 7b 61 70 70  estfile}" "${app
0a40: 66 73 64 69 72 7d 2f 73 68 61 31 2f 24 7b 6d 61  fsdir}/sha1/${ma
0a50: 6e 69 66 65 73 74 66 69 6c 65 5f 68 61 73 68 7d  nifestfile_hash}
0a60: 22 0a 0a 09 09 09 09 09 23 20 58 58 58 3a 54 4f  ".......# XXX:TO
0a70: 44 4f 3a 20 44 65 74 65 72 6d 69 6e 65 20 69 66  DO: Determine if
0a80: 20 74 68 69 73 20 69 73 20 74 68 65 20 6c 61 74   this is the lat
0a90: 65 73 74 20 76 65 72 73 69 6f 6e 0a 09 09 09 09  est version.....
0aa0: 09 69 73 4c 61 74 65 73 74 3d 27 30 27 0a 0a 09  .isLatest='0'...
0ab0: 09 09 09 09 65 63 68 6f 20 22 24 7b 70 61 63 6b  ....echo "${pack
0ac0: 61 67 65 7d 2c 24 7b 76 65 72 73 69 6f 6e 7d 2c  age},${version},
0ad0: 24 7b 6f 73 7d 2c 24 7b 63 70 75 41 72 63 68 7d  ${os},${cpuArch}
0ae0: 2c 24 7b 6d 61 6e 69 66 65 73 74 66 69 6c 65 5f  ,${manifestfile_
0af0: 68 61 73 68 7d 2c 24 7b 69 73 4c 61 74 65 73 74  hash},${isLatest
0b00: 7d 22 0a 09 09 09 09 64 6f 6e 65 0a 0a 09 09 09  }".....done.....
0b10: 29 0a 09 09 64 6f 6e 65 0a 09 29 0a 0a 64 6f 6e  )...done..)..don
0b20: 65 20 3e 20 22 24 7b 70 61 63 6b 61 67 65 6c 69  e > "${packageli
0b30: 73 74 66 69 6c 65 7d 22 0a 70 61 63 6b 61 67 65  stfile}".package
0b40: 6c 69 73 74 66 69 6c 65 5f 68 61 73 68 3d 22 24  listfile_hash="$
0b50: 28 73 68 61 31 20 22 24 7b 70 61 63 6b 61 67 65  (sha1 "${package
0b60: 6c 69 73 74 66 69 6c 65 7d 22 29 22 0a 6d 76 20  listfile}")".mv 
0b70: 22 24 7b 70 61 63 6b 61 67 65 6c 69 73 74 66 69  "${packagelistfi
0b80: 6c 65 7d 22 20 22 24 7b 61 70 70 66 73 64 69 72  le}" "${appfsdir
0b90: 7d 2f 73 68 61 31 2f 24 7b 70 61 63 6b 61 67 65  }/sha1/${package
0ba0: 6c 69 73 74 66 69 6c 65 5f 68 61 73 68 7d 22 0a  listfile_hash}".
0bb0: 0a 65 63 68 6f 20 22 24 7b 70 61 63 6b 61 67 65  .echo "${package
0bc0: 6c 69 73 74 66 69 6c 65 5f 68 61 73 68 7d 2c 73  listfile_hash},s
0bd0: 68 61 31 22 20 3e 20 22 24 7b 61 70 70 66 73 64  ha1" > "${appfsd
0be0: 69 72 7d 2f 69 6e 64 65 78 22 0a                 ir}/index".