#!/bin/execlineb -P

/bin/export PATH /usr/bin:/bin
/bin/export recfunction "\
foreground { s6-chown -u ${3} -g ${4} -- ${1} }
foreground
{
  ifelse { s6-test -d ${1} }
  {
    if -t { s6-test ! ${6} = "-" }
    s6-chmod ${6} ${1}
  }
  if -t { s6-test ! ${5} = "-" }
  s6-chmod ${5} ${1}
}
if -t { if { s6-${2} } s6-test -d ${1} }
forbacktickx -0 subfile
{
  backtick -D 0 -n S6_FIX_ATTRS_HIDDEN { printcontenv S6_FIX_ATTRS_HIDDEN }
  importas S6_FIX_ATTRS_HIDDEN S6_FIX_ATTRS_HIDDEN
  ifelse { s6-test ${S6_FIX_ATTRS_HIDDEN} -eq 0 } { s6-ls -0 ${1} }
  s6-ls -0 -a ${1}
}
multisubstitute
{
  importas -u subfile subfile
  importas recfunction recfunction
}
execlineb -S6 -c ${recfunction} ${1}/${subfile} true ${3} ${4} ${5} ${6}"

# process each line
forstdin -d"\n" -- line
importas -u line line
if { s6-test -n ${line} }
multidefine -0 -Cd" \t" -- ${line} { globex recurse userentry fmode dmode }
# get 'uid' and 'gid'
multidefine -Cd"," -- ${userentry} { account uidgid }
backtick -n envuidgid_opts
{
  backtick -n opts
  {
    ifte { s6-echo -- -D${uidgid} } { s6-echo -- -i }
    s6-test -n ${uidgid}
  }
  importas -u opts opts
  ifte { s6-echo -- -nB ${opts} } { s6-echo -- ${opts} }
  pipeline { s6-echo ${account} }
  if
  {
    redirfd -w 1 /dev/null
    fdmove -c 2 1
    s6-grep -- ":"
  }
}
importas -u -sCd" \t" envuidgid_opts envuidgid_opts
s6-envuidgid ${envuidgid_opts} ${account}
importas -u uid UID
importas -u gid GID
elglob -0 -- files ${globex}
forx -p -- file { ${files} }
multisubstitute
{
  importas -u file file
  importas recfunction recfunction
}
execlineb -S6 -c ${recfunction} ${file} ${recurse} ${uid} ${gid} ${fmode} ${dmode}
