Switch branch in 'portzap pull'
This commit covers a few changes: * The 'portzap pull' command now switches to '$PORTZAP_BRANCH' if 'git branch --show-current' returns a different branch. * The 'portzap pull' command fixes permissions and ownership on '/home/_portzap/ports/.git' before running any git commands. The owner and permissions can change by interacting with the git repository directly, as a user other than '_portzap'. * doas.conf has been changed to be slightly more strict
This commit is contained in:
parent
3bd40e36c2
commit
4aaa685b3d
7 changed files with 50 additions and 17 deletions
|
@ -2,13 +2,14 @@
|
||||||
|
|
||||||
##
|
##
|
||||||
# variables
|
# variables
|
||||||
|
git=/usr/local/bin/git
|
||||||
gitdir=$1
|
gitdir=$1
|
||||||
commit=$2
|
commit=$2
|
||||||
|
|
||||||
##
|
##
|
||||||
# main
|
# main
|
||||||
cd "${gitdir}"
|
cd "${gitdir}"
|
||||||
add=$(git diff --name-only --diff-filter=A "${commit}" HEAD)
|
add=$(doas -u _portzap "${git}" diff --name-only --diff-filter=A "${commit}" HEAD)
|
||||||
mod=$(git diff --name-only --diff-filter=M "${commit}" HEAD)
|
mod=$(doas -u _portzap "${git}" diff --name-only --diff-filter=M "${commit}" HEAD)
|
||||||
echo "${add}"
|
echo "${add}"
|
||||||
echo "${mod}"
|
echo "${mod}"
|
||||||
|
|
|
@ -2,10 +2,11 @@
|
||||||
|
|
||||||
##
|
##
|
||||||
# variables
|
# variables
|
||||||
|
git=/usr/local/bin/git
|
||||||
gitdir=$1
|
gitdir=$1
|
||||||
commit=$2
|
commit=$2
|
||||||
|
|
||||||
##
|
##
|
||||||
# main
|
# main
|
||||||
cd "${gitdir}"
|
cd "${gitdir}"
|
||||||
git diff --name-only --diff-filter=D "${commit}" HEAD
|
doas -u _portzap "${git}" diff --name-only --diff-filter=D "${commit}" HEAD
|
||||||
|
|
|
@ -2,9 +2,10 @@
|
||||||
|
|
||||||
##
|
##
|
||||||
# variables
|
# variables
|
||||||
|
git=/usr/local/bin/git
|
||||||
gitdir=$1
|
gitdir=$1
|
||||||
|
|
||||||
##
|
##
|
||||||
# main
|
# main
|
||||||
cd "${gitdir}"
|
cd "${gitdir}"
|
||||||
git rev-parse HEAD
|
doas -u _portzap "${git}" rev-parse HEAD
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
##
|
##
|
||||||
# variables
|
# variables
|
||||||
|
git=/usr/local/bin/git
|
||||||
giturl=$1
|
giturl=$1
|
||||||
gitdir=$2
|
gitdir=$2
|
||||||
branch=$3
|
branch=$3
|
||||||
|
@ -15,9 +16,9 @@ if [ -e "${gitdir}/.git" ]; then
|
||||||
fi
|
fi
|
||||||
set -x
|
set -x
|
||||||
umask u=rwX,g=rwX,o=
|
umask u=rwX,g=rwX,o=
|
||||||
git clone "${giturl}" "${gitdir}"
|
"${git}" clone "${giturl}" "${gitdir}"
|
||||||
cd "${gitdir}"
|
cd "${gitdir}"
|
||||||
set +x +e
|
set +x +e
|
||||||
echo "[-] Checkout ${branch}"
|
echo "[-] Checkout ${branch}"
|
||||||
git checkout -t origin/"${branch}" > /dev/null 2>&1;
|
"${git}" checkout -t origin/"${branch}" > /dev/null 2>&1;
|
||||||
echo "[-] Done"
|
echo "[-] Done"
|
||||||
|
|
|
@ -5,16 +5,15 @@
|
||||||
gitdir=$1
|
gitdir=$1
|
||||||
installdir=$2
|
installdir=$2
|
||||||
revfile=$3
|
revfile=$3
|
||||||
localbase="${LOCALBASE:-/usr/local}"
|
libexec=$(dirname $0)
|
||||||
libexec="${localbase}/libexec/portzap"
|
|
||||||
|
|
||||||
##
|
##
|
||||||
# functions
|
# functions
|
||||||
perform_update()
|
perform_update()
|
||||||
{
|
{
|
||||||
rev=$(cat "${revfile}")
|
rev=$(cat "${revfile}")
|
||||||
add=$(doas -u _portzap "${libexec}"/git-changed-files "${gitdir}" "${rev}")
|
add=$("${libexec}"/git-changed-files "${gitdir}" "${rev}")
|
||||||
del=$(doas -u _portzap "${libexec}"/git-removed-files "${gitdir}" "${rev}")
|
del=$("${libexec}"/git-removed-files "${gitdir}" "${rev}")
|
||||||
for file in ${del}; do
|
for file in ${del}; do
|
||||||
target="${installdir}/${file}"
|
target="${installdir}/${file}"
|
||||||
parent=$(dirname "${target}")
|
parent=$(dirname "${target}")
|
||||||
|
@ -69,4 +68,4 @@ if [ -e "${revfile}" ]; then
|
||||||
else
|
else
|
||||||
perform_install
|
perform_install
|
||||||
fi
|
fi
|
||||||
doas -u _portzap "${libexec}"/git-rev "${gitdir}" > "${revfile}"
|
"${libexec}"/git-rev "${gitdir}" > "${revfile}"
|
||||||
|
|
|
@ -2,16 +2,46 @@
|
||||||
|
|
||||||
##
|
##
|
||||||
# variables
|
# variables
|
||||||
|
git=/usr/local/bin/git
|
||||||
gitdir=$1
|
gitdir=$1
|
||||||
branch=$2
|
branch=$2
|
||||||
|
libexec=$(dirname "$0")
|
||||||
|
|
||||||
|
##
|
||||||
|
# functions
|
||||||
|
set_repository_permissions()
|
||||||
|
{
|
||||||
|
gitdir=$1
|
||||||
|
doas -u root /bin/chmod -R u=rwX,g=rwX,o= "${gitdir}/.git"
|
||||||
|
doas -u root /usr/sbin/chown -R _portzap:_portzap "${gitdir}/.git"
|
||||||
|
}
|
||||||
|
|
||||||
|
change_branch()
|
||||||
|
{
|
||||||
|
set +e
|
||||||
|
remote=$1
|
||||||
|
branch=$2
|
||||||
|
echo "[-] Attempt to change branch: ${branch}"
|
||||||
|
"${git}" fetch "${remote}" > /dev/null 2>&1
|
||||||
|
"${git}" checkout "${branch}" > /dev/null 2>&1 ||
|
||||||
|
"${git}" checkout -t "${remote}"/"${branch}" > /dev/null 2>&1
|
||||||
|
"${git}" reset HEAD --hard > /dev/null 2>&1
|
||||||
|
echo "[-] Done"
|
||||||
|
set -e
|
||||||
|
}
|
||||||
|
|
||||||
##
|
##
|
||||||
# main
|
# main
|
||||||
set -x
|
|
||||||
umask u=rwX,g=rwX,o=
|
|
||||||
if [ -e "${gitdir}/.git" ]; then
|
if [ -e "${gitdir}/.git" ]; then
|
||||||
|
umask u=rwX,g=rwX,o=
|
||||||
|
set_repository_permissions "${gitdir}"
|
||||||
cd "${gitdir}"
|
cd "${gitdir}"
|
||||||
git pull --rebase origin "${branch}"
|
remote=$("${git}" remote | head -n1)
|
||||||
|
if [ $(git branch --show-current) != "${branch}" ]; then
|
||||||
|
change_branch "${remote}" "${branch}"
|
||||||
|
fi
|
||||||
|
set -x
|
||||||
|
"${git}" pull --rebase "${remote}" "${branch}"
|
||||||
else
|
else
|
||||||
set +x
|
set +x
|
||||||
echo "[-] ${gitdir} is not a valid git repository."
|
echo "[-] ${gitdir} is not a valid git repository."
|
||||||
|
|
|
@ -3,6 +3,6 @@
|
||||||
permit nopass :_portzap as _portzap cmd /usr/local/libexec/portzap/portzap-clone
|
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 :_portzap as _portzap cmd /usr/local/libexec/portzap/portzap-pull
|
||||||
permit nopass :_portzap as _portzap cmd /usr/local/libexec/portzap/portzap-erase
|
permit nopass :_portzap as _portzap cmd /usr/local/libexec/portzap/portzap-erase
|
||||||
permit nopass root as _portzap cmd /usr/local/libexec/portzap/git-changed-files
|
permit nopass root as _portzap cmd /usr/local/bin/git
|
||||||
permit nopass root as _portzap cmd /usr/local/libexec/portzap/git-removed-files
|
permit nopass _portzap as root cmd /bin/chmod args -R u=rwX,g=rwX,o= /home/_portzap/ports/.git
|
||||||
permit nopass root as _portzap cmd /usr/local/libexec/portzap/git-rev
|
permit nopass _portzap as root cmd /usr/sbin/chown args -R _portzap:_portzap /home/_portzap/ports/.git
|
||||||
|
|
Loading…
Reference in a new issue