Perform incremental updates (via doas)

This commit is contained in:
0x1eef 2024-04-08 14:32:32 -03:00
parent ea6a5e46e5
commit 73ec936871
5 changed files with 80 additions and 9 deletions

View file

@ -0,0 +1,14 @@
#!/bin/sh -e
##
# variables
gitdir=$1
commit=$2
##
# main
cd ${gitdir}
add=$(git diff --name-only --diff-filter=A ${commit} HEAD)
mod=$(git diff --name-only --diff-filter=M ${commit} HEAD)
echo ${add}
echo ${mod}

View file

@ -0,0 +1,11 @@
#!/bin/sh -e
##
# variables
gitdir=$1
commit=$2
##
# main
cd ${gitdir}
git diff --name-only --diff-filter=D ${commit} HEAD

10
libexec/portzap/git-rev Normal file
View file

@ -0,0 +1,10 @@
#!/bin/sh -e
##
# variables
gitdir=$1
##
# main
cd ${gitdir}
git rev-parse HEAD

View file

@ -4,16 +4,47 @@
# variables
gitdir=$1
installdir=$2
excludes=".git .gitignore .hooks .arcconfig"
revfile=$3
artifacts=".git .gitignore .hooks .arcconfig"
libexec=/usr/local/libexec/portzap
##
# functions
perform_update()
{
rev=$(cat "${revfile}")
add=$(doas -u _portzap ${libexec}/git-changed-files "${gitdir}" "${rev}")
del=$(doas -u _portzap ${libexec}/git-removed-files "${gitdir}" "${rev}")
set -x
for file in ${del}; do
target="${installdir}/${file}"
rm "${target}"
done
for file in ${add}; do
target="${installdir}/${file}"
cp "${file}" "${target}"
chown root:_portzap "${target}"
chmod u=rw,g=rw,o= "${target}"
done
}
perform_install()
{
find -s . -maxdepth 1 \
-exec cp -Rfv {} "${installdir}" \; \
-exec chown -R root:_portzap "${installdir}/{}" \; \
-exec chmod -R u=rwX,g=rwX,o= "${installdir}/{}" \;
for path in ${artifacts}; do
rm -rf "${installdir}/${path}"
done
}
##
# main
cd "${gitdir}"
find -s . -maxdepth 1 \
-exec cp -Rfv {} "${installdir}" \; \
-exec chown -R root:_portzap "${installdir}/{}" \; \
-exec chmod -R u=rwX,g=rwX,o= "${installdir}/{}" \;
cd "${installdir}"
for exclude in ${excludes}; do
rm -rf "${exclude}"
done
if [ -e "${revfile}" ]; then
perform_update
else
perform_install
fi
echo $(doas -u _portzap ${libexec}/git-rev ${gitdir}) > ${revfile}

View file

@ -1,2 +1,7 @@
##
# portzap
permit nopass :_portzap as _portzap cmd /usr/local/libexec/portzap/portzap-clone
permit nopass :_portzap as _portzap cmd /usr/local/libexec/portzap/portzap-pull
permit nopass root as _portzap cmd /usr/local/libexec/portzap/git-changed-files
permit nopass root as _portzap cmd /usr/local/libexec/portzap/git-removed-files
permit nopass root as _portzap cmd /usr/local/libexec/portzap/git-rev