diff --git a/README.md b/README.md index c11a3c1..e6b2e4b 100644 --- a/README.md +++ b/README.md @@ -13,8 +13,8 @@ can be installed into `/usr/ports/` by root. This command should be run after installing portzap for the first time: - # Add the portzap user, group and home directory. - # This command requires root privileges. + # Add the portzap user, group and home directory + # This command requires root privileges # setup-portzap ### CLI: portzap @@ -27,6 +27,10 @@ the first time: # This command is delegated to the '_portzap' user $ portzap pull + # Checkout a branch other than the default: hardenedbsd/main + # This command is delegated to the '_portzap' user + $ portzap checkout + # Install /home/_portzap/ports/ into /usr/ports/ # This command requires root privileges # portzap install @@ -35,20 +39,15 @@ the first time: # This command requires root privileges $ portzap rm - ### ENVIRONMENT * __$PORTZAP\_GITURL__
- The URL to a git repository.
- Default: https://git.HardenedBSD.org/HardenedBSD/ports.git. - -* __$PORTZAP\_BRANCH__
- The git branch to clone and pull updates from.
- Default: hardenedbsd/main. + The URL to a git repository
+ Default: https://git.HardenedBSD.org/HardenedBSD/ports.git * __$PORTZAP\_INSTALLDIR__
- The directory where the ports collection will be installed.
- Default: /usr/ports/. + The directory where the ports collection will be installed
+ Default: /usr/ports/ ## Install @@ -82,5 +81,5 @@ via git: ## License -[BSD Zero Clause](https://choosealicense.com/licenses/0bsd/).
-See [LICENSE](./LICENSE). +[BSD Zero Clause](https://choosealicense.com/licenses/0bsd/)
+See [LICENSE](./LICENSE) diff --git a/bin/portzap b/bin/portzap index c0c51c2..232cfa1 100755 --- a/bin/portzap +++ b/bin/portzap @@ -4,9 +4,9 @@ set -e ## # variables localbase="${LOCALBASE:-/usr/local}" +defaultbranch="hardenedbsd/main" gitdir="/home/_portzap/ports" giturl="${PORTZAP_GITURL:-https://git.hardenedbsd.org/hardenedbsd/ports.git}" -branch="${PORTZAP_BRANCH:-hardenedbsd/main}" installdir="${PORTZAP_INSTALLDIR:-/usr/ports}" revision="${installdir}"/.portzap libexec="${localbase}"/libexec/portzap @@ -40,11 +40,15 @@ done case $1 in "clone") require_dependency "git doas" - "${libexec}"/portzap-clone "${giturl}" "${gitdir}" "${branch}" + "${libexec}"/portzap-clone "${giturl}" "${gitdir}" "${defaultbranch}" ;; "pull") require_dependency "git doas" - "${libexec}"/portzap-pull "${gitdir}" "${branch}" + "${libexec}"/portzap-pull "${gitdir}" + ;; + "checkout") + require_dependency "git doas" + "${libexec}"/portzap-checkout "${gitdir}" "${2}" ;; "rm") "${libexec}"/portzap-rm "${gitdir}" "${installdir}" @@ -57,9 +61,10 @@ case $1 in printf "Usage: portzap COMMAND [OPTIONS]\n" printf "\n" printf "Commands:\n" - printf " clone Clone the hardenedbsd ports tree\n" - printf " pull Pull updates from the hardenedbsd ports tree\n" - printf " rm Remove /usr/ports/ and /home/_portzap/ports/\n" - printf " install Install the ports tree into /usr/ports/\n" + printf " clone Clone the hardenedbsd ports tree\n" + printf " pull Pull updates from the hardenedbsd ports tree\n" + printf " checkout Checkout a branch other than the default\n" + printf " rm Remove /usr/ports/ and /home/_portzap/ports/\n" + printf " install Install the ports tree into /usr/ports/\n" ;; esac diff --git a/libexec/portzap/portzap-checkout b/libexec/portzap/portzap-checkout new file mode 100644 index 0000000..b91ba85 --- /dev/null +++ b/libexec/portzap/portzap-checkout @@ -0,0 +1,40 @@ +#!/bin/sh +set -e + +## +# variables +libexec=$(dirname "$0") +localbase=${LOCALBASE:-/usr/local} +git="${localbase}"/bin/git +mode="u=rwX,g=rX,o=" +gitdir="$1" +branch="$2" + +## +# functions +gitexec() +{ + doas -n -u _portzap \ + /bin/sh -c "umask ${mode}; ${git} ${1}" +} + +## +# main +if ! "${libexec}"/isportzap-member; then + echo "[x] This command must be run by a member of the '_portzap' group" + exit 1 +fi + +if [ ! -e "${gitdir}/.git" ]; then + echo "[x] ${gitdir} is not a valid git repository." + echo "[x] Try: portzap clone" + exit 1 +fi + +set -x +cd "${gitdir}" +gitexec "fetch origin" +gitexec "checkout ${branch}" || +gitexec "checkout -t origin/${branch}" +set +x +printf "current branch: %s\n" "${branch}" diff --git a/libexec/portzap/portzap-pull b/libexec/portzap/portzap-pull index 10a70db..bb4946a 100755 --- a/libexec/portzap/portzap-pull +++ b/libexec/portzap/portzap-pull @@ -7,7 +7,6 @@ libexec=$(dirname "$0") localbase=${LOCALBASE:-/usr/local} git="${localbase}"/bin/git gitdir=$1 -branch=$2 mode="u=rwX,g=rX,o=" ## @@ -18,43 +17,21 @@ gitexec() /bin/sh -c "umask ${mode}; ${git} ${1}" } -change_branch() -{ - set +e - remote=$1 - branch=$2 - echo "[-] Attempt to change branch: ${branch}" - gitexec "fetch ${remote} > /dev/null 2>&1" - if ! gitexec "checkout ${branch} > /dev/null 2>&1" || - gitexec "checkout -t ${remote}/${branch} > /dev/null 2>&1"; then - r="${?}" - echo "[-] 'git checkout' exited with an error" - exit "${r}" - else - echo "[-] Done" - fi - set -e -} - ## # main if ! "${libexec}"/isportzap-member; then - echo "[-] This command must be run by a member of the '_portzap' group" + echo "[x] This command must be run by a member of the '_portzap' group" exit 1 fi if [ ! -e "${gitdir}/.git" ]; then set +x - echo "[-] ${gitdir} is not a valid git repository." - echo "[-] Try 'portzap clone'" + echo "[x] ${gitdir} is not a valid git repository." + echo "[x] Try 'portzap clone'" exit 1 fi -cd "${gitdir}" -remote=$(gitexec "remote" | head -n1) -cbranch=$(gitexec "branch --show-current") -if [ "${cbranch}" != "${branch}" ]; then - change_branch "${remote}" "${branch}" -fi set -x -gitexec "pull --rebase ${remote} ${branch}" +cd "${gitdir}" +branch=$(gitexec "branch --show-current") +gitexec "pull --rebase origin ${branch}" diff --git a/man/man8/portzap.8 b/man/man8/portzap.8 index 65400f0..a12c0fd 100644 --- a/man/man8/portzap.8 +++ b/man/man8/portzap.8 @@ -10,6 +10,8 @@ portzap clone .br portzap pull .br +portzap checkout +.br portzap install .br portzap rm @@ -33,6 +35,13 @@ This command is delegated to the '_portzap' user Pull updates into /home/_portzap/ports/ .br This command is delegated to the '_portzap' user +.br +.Pp +.Nm portzap checkout +.br +Checkout a branch other than the default: hardenedbsd/main +.br +This command is delegated to the '_portzap' user .Pp .Nm portzap install .br @@ -55,13 +64,6 @@ The URL to a git repository .br Default: https://git.HardenedBSD.org/HardenedBSD/ports.git .sp -.Nm PORTZAP_BRANCH -.br -The git branch to clone and pull updates from -.br -Default: hardenedbsd/main -.br -.sp .Nm PORTZAP_INSTALLDIR .br The directory where the ports collection will be installed