diff --git a/build b/build index 78d57ec5..6023c210 100755 --- a/build +++ b/build @@ -9,6 +9,8 @@ if [ -n "${ZSH_VERSION:-}" ]; then emulate sh -o err_exit -o no_unset fi +export LC_ALL=C + usage="$(command cat <<\END Usage: build [-m ARCH] [-c CPU] [-d CMD] [-i IMAGE] [-s] [-w] @@ -52,7 +54,7 @@ if [ "$(narg $workdir)" != 1 -o -z "${workdir##*:*}" ]; then exit 1 fi -appname=gitstatusd-"$gitstatus_kernel"-"$gitstatus_arch" +appname=gitstatusd libgit2_tmp="$outdir"/deps/"$appname".libgit2.tmp cleanup() { @@ -68,8 +70,16 @@ trap cleanup INT QUIT TERM ILL PIPE if [ -n "$gitstatus_install_tools" ]; then case "$gitstatus_kernel" in linux) - command apk update - command apk add binutils cmake gcc g++ git make musl-dev perl-utils + if command -v apk >/dev/null 2>&1; then + command apk update + command apk add binutils cmake gcc g++ git make musl-dev perl-utils + elif command -v apt-get >/dev/null 2>&1; then + apt-get update + apt-get install -y binutils cmake gcc g++ make wget + else + >&2 echo "[error] -s is not supported on this system" + exit 1 + fi ;; freebsd) command pkg install -y cmake gmake binutils gcc git perl5 @@ -110,8 +120,8 @@ cpus="$(command getconf _NPROCESSORS_ONLN 2>/dev/null)" || cpus=8 case "$gitstatus_cpu" in - ppc64le) archflag="-mcpu";; - *) archflag="-march";; + powerpc64le) archflag="-mcpu";; + *) archflag="-march";; esac cflags="$archflag=$gitstatus_cpu -fno-plt" @@ -131,9 +141,7 @@ gitstatus_make=make case "$gitstatus_kernel" in linux) - if [ -n "$docker_cmd" ]; then - gitstatus_ldflags="$gitstatus_ldflags -static" - fi + gitstatus_ldflags="$gitstatus_ldflags -static" gitstatus_ldflags="$gitstatus_ldflags -Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now" libgit2_cmake_flags="$libgit2_cmake_flags -DENABLE_REPRODUCIBLE_BUILDS=ON" ;; @@ -446,9 +454,6 @@ case "$gitstatus_kernel" in ;; esac fi - elif [ -n "$gitstatus_install_tools" ]; then - >&2 echo '[error] -s without -d is not supported on linux' - exit 1 fi ;; freebsd|netbsd|darwin) diff --git a/build.info b/build.info index 80dbc452..cf180b0c 100644 --- a/build.info +++ b/build.info @@ -2,8 +2,8 @@ # read by ./Makefile. `gitstatusd --version` reports it back. # # This value is also read by shell bindings (indirectly, through -# ./install) when gitstatusd is from ./usrbin. -gitstatus_version="v1.0.0" +# ./install) when using GITSTATUS_DAEMON or usrbin/gitstatusd. +gitstatus_version="v1.2.0" # libgit2 is a build time dependency of gitstatusd. The values of # libgit2_version and libgit2_sha256 are read by ./build. @@ -18,5 +18,5 @@ gitstatus_version="v1.0.0" # # If sha256 of ./deps/libgit2-${libgit2_version}.tar.gz doesn't match, # build gets aborted. -libgit2_version="tag-005f77dca6dbe8788e55139fa1199fc94cc04f9a" -libgit2_sha256="6af7c839640ed5474fef9761a80b5c24bcdd87abc771406e31d5c2bf27f48be5" +libgit2_version="tag-d6c37a38587c9af2a9e63449fc8bf951dca0e854" +libgit2_sha256="e3df79da60963f8711580dce53b1a7ed583bb534be9ebb95589e76346fa986be" diff --git a/gitstatus.plugin.sh b/gitstatus.plugin.sh index 1ecccb85..2fe322ef 100644 --- a/gitstatus.plugin.sh +++ b/gitstatus.plugin.sh @@ -146,8 +146,18 @@ function gitstatus_start() { local sig=(TERM ILL PIPE) + if (( UID == EUID )); then + local home=~ + else + local user + user="$(command id -un)" || return + [[ "$user" =~ ^[a-zA-Z0-9_,.-]+$ ]] || return + eval "local home=~$user" + [[ -n "$home" ]] || return + fi + if [[ -x "$_gitstatus_bash_daemon" ]]; then - "$_gitstatus_bash_daemon" \ + HOME="$home" "$_gitstatus_bash_daemon" \ -G "$_gitstatus_bash_version" "${daemon_args[@]}" <&"$fd_in" >&"$fd_out" & local pid=$! trap "trap - ${sig[*]}; kill $pid &>/dev/null" ${sig[@]} @@ -176,7 +186,7 @@ function gitstatus_start() { [[ -n "$_gitstatus_bash_version" ]] || return [[ "$_gitstatus_bash_downloaded" == 1 ]] || return - "$_gitstatus_bash_daemon" \ + HOME="$home" "$_gitstatus_bash_daemon" \ -G "$_gitstatus_bash_version" "${daemon_args[@]}" <&"$fd_in" >&"$fd_out" & local pid=$! trap "trap - ${sig[*]}; kill $pid &>/dev/null" ${sig[@]} diff --git a/gitstatus.plugin.zsh b/gitstatus.plugin.zsh index cc6662a7..0df36724 100644 --- a/gitstatus.plugin.zsh +++ b/gitstatus.plugin.zsh @@ -406,8 +406,17 @@ function _gitstatus_daemon"${1:-}"() { [[ -n $_gitstatus_zsh_version ]] || return [[ $_gitstatus_zsh_downloaded == [01] ]] || return + if (( UID == EUID )); then + local home=~ + else + local user + user="$(command id -un)" || return + local home=${userdirs[$user]} + [[ -n $home ]] || return + fi + if [[ -x $_gitstatus_zsh_daemon ]]; then - $_gitstatus_zsh_daemon -G $_gitstatus_zsh_version "${(@)args}" >&$pipe_fd + HOME=$home $_gitstatus_zsh_daemon -G $_gitstatus_zsh_version "${(@)args}" >&$pipe_fd local -i ret=$? [[ $ret == (0|129|130|131|137|141|143) ]] && return ret fi @@ -426,7 +435,7 @@ function _gitstatus_daemon"${1:-}"() { [[ -n $_gitstatus_zsh_version ]] || return [[ $_gitstatus_zsh_downloaded == 1 ]] || return - $_gitstatus_zsh_daemon -G $_gitstatus_zsh_version "${(@)args}" >&$pipe_fd + HOME=$home $_gitstatus_zsh_daemon -G $_gitstatus_zsh_version "${(@)args}" >&$pipe_fd } always { local -i ret=$? zf_rm -f -- $file_prefix.lock $file_prefix.fifo diff --git a/install b/install index c5b15d22..4303129b 100755 --- a/install +++ b/install @@ -131,14 +131,8 @@ END >&2 echo "[gitstatus] error: GITSTATUS_DAEMON is not absolute path: $daemon" return 1 fi - if [ -z "$daemon" ]; then + if [ -z "$daemon" && -e "$gitstatus_dir"/usrbin/gitstatusd ]; then daemon="$gitstatus_dir"/usrbin/gitstatusd - if [ ! -e "$daemon" ]; then - daemon="$daemon"-"$uname_s"-"$uname_m" - if [ ! -e "$daemon" ]; then - daemon= - fi - fi fi if [ -n "$daemon" ]; then local gitstatus_version= libgit2_version= @@ -184,23 +178,13 @@ END if [ -z "$no_check" ]; then # Check if a suitable gitstatusd already exists. - local daemon="$cache_dir"/"$file" - if [ -e "$daemon" ]; then - [ $# = 0 ] || "$@" "$daemon" "$version" 0 - return + local daemon="$gitstatus_dir"/usrbin/"$file" + if [ ! -e "$daemon" ]; then + daemon="$cache_dir"/"$file" + [ -e "$daemon" ] || daemon= fi - daemon="$daemon"-"$uname_s"-"$uname_m" - if [ -e "$daemon" ]; then - local gitstatus_version= libgit2_version= - if ! . "$gitstatus_dir"/build.info; then - >&2 echo "[gitstatus] internal error: failed to source build.info" - return 1 - fi - if [ -z "$gitstatus_version" ]; then - >&2 echo "[gitstatus] internal error: empty gitstatus_version in build.info" - return 1 - fi - [ $# = 0 ] || "$@" "$daemon" "$gitstatus_version" 0 + if [ -n "$daemon" ]; then + [ $# = 0 ] || "$@" "$daemon" "$version" 0 return fi fi diff --git a/install.info b/install.info index 35260b7f..668f3e48 100644 --- a/install.info +++ b/install.info @@ -14,6 +14,7 @@ uname_s_glob="linux"; uname_m_glob="aarch64"; file="gitstatusd-${uname_ uname_s_glob="linux"; uname_m_glob="armv6l"; file="gitstatusd-${uname_s}-${uname_m}"; version="v1.0.0"; sha256="051a9448d9cb4bb1d95e93cff51a6ab48a085465ec30eec40046977d4213feff"; uname_s_glob="linux"; uname_m_glob="armv7l"; file="gitstatusd-${uname_s}-${uname_m}"; version="v1.0.0"; sha256="adaa47c8e8dec1e1e8686c3044ee0f45afda15deaa8388efcb4952747b66246e"; uname_s_glob="linux"; uname_m_glob="i686"; file="gitstatusd-${uname_s}-${uname_m}"; version="v1.0.0"; sha256="c80355664e7361e11215e64b523ed75a3d39f72393fa2204fefa85eae0342a67"; +uname_s_glob="linux"; uname_m_glob="ppc64le"; file="gitstatusd-${uname_s}-${uname_m}"; version="v1.2.0"; sha256="38a60b64f619d9db83747f1653b0b740380b1b2b9b414a0ff94815305cdd76bc"; uname_s_glob="linux"; uname_m_glob="x86_64"; file="gitstatusd-${uname_s}-${uname_m}"; version="v1.0.0"; sha256="e33867063f091d3c31ede9916fef079ff8cd6fdcc70d051914f962ab3b8f36fd"; uname_s_glob="msys_nt-10.0"; uname_m_glob="i686"; file="gitstatusd-${uname_s}-${uname_m}"; version="v1.0.0"; sha256="2cf6ff92a5c50e4181ceb402217162bebd5e52144eb52eacfef2f6d47d5c20d4"; uname_s_glob="msys_nt-10.0"; uname_m_glob="x86_64"; file="gitstatusd-${uname_s}-${uname_m}"; version="v1.0.0"; sha256="960c3d9d90d7b96257a9746f7168faffdf9b5fbda464e354e7b14c42cc473f15"; diff --git a/mbuild b/mbuild index cf4bc008..7d98b1fb 100755 --- a/mbuild +++ b/mbuild @@ -117,6 +117,7 @@ local -rA assets=( linux-armv6l build-linux-armv7l linux-armv7l build-linux-armv7l linux-i686 build-linux-x86_64 + linux-ppc64le build-linux-ppc64le linux-x86_64 build-linux-x86_64 ) @@ -180,14 +181,15 @@ local build=' function build-unix() { local intro flags=(-sw) case $2 in - darwin-*) intro='PATH="/usr/local/bin:$PATH"';; + linux-ppc64le);; linux-*) flags+=(-d docker);; + darwin-*) intro='PATH="/usr/local/bin:$PATH"';; esac ssh $1 -- /bin/sh -uex <<<" $intro cd /tmp $build ${2##*-} ${(j: :)${(@q)flags}}" - scp $1:/tmp/gitstatus/usrbin/gitstatusd-$2 $binaries/ + scp $1:/tmp/gitstatus/usrbin/gitstatusd $binaries/gitstatusd-$2 } function build-windows() { @@ -236,7 +238,7 @@ function build-windows() { while true; do IFS= read -u $fd -r line || return 0 if [[ $line == *"warning: terminate MSYS2"* ]]; then - # At this point the machine is hosed. Rogue process with corrupted name + # At this point the machine is hosed. A rogue process with a corrupted name # is eating all CPU. The top SSH connection won't terminate on its own. ssh $1 powershell.exe <<<'Restart-Computer -Force' || true sleep 30 @@ -260,7 +262,7 @@ function build-windows() { cd -- $tmp $build ${2##*-} ${(j: :)${(@q)flags}} exit" - scp $1:$c/tmp/gitstatus/usrbin/gitstatusd-$2 $binaries/ + scp $1:$c/tmp/gitstatus/usrbin/gitstatusd $binaries/gitstatusd-$2 chmod +x $binaries/gitstatusd-$2 } @@ -272,7 +274,7 @@ function build() ( zsystem flock $locks/$machine build-${protocol[(k)$platform]} $machine $platform local tmp=gitstatusd-$platform.tmp.$$.tar.gz - ( cd -q -- $binaries; GZIP=-9 tar -czf $tmp gitstatusd-$platform ) + ( cd -q -- $binaries; tar --owner=0 --group=0 -I 'gzip -9' -cf $tmp gitstatusd-$platform ) mv -f -- $binaries/$tmp $binaries/gitstatusd-$platform.tar.gz )