diff options
-rw-r--r-- | include/init.sh | 81 | ||||
-rwxr-xr-x | mk | 18 |
2 files changed, 58 insertions, 41 deletions
diff --git a/include/init.sh b/include/init.sh index 2e60883d..a88bd13f 100644 --- a/include/init.sh +++ b/include/init.sh @@ -18,8 +18,14 @@ err="err_" setvars() { - _setvars="" && [ $# -lt 2 ] && $err "setvars: too few arguments" - val="$1" && shift 1 && for var in "$@"; do + _setvars="" + if [ $# -lt 2 ]; then + printf "\$err \"setvars: too few args\\n\"" + return 0 + fi + val="$1" + shift 1 + for var in "$@"; do _setvars="$var=\"$val\"; $_setvars" done printf "%s\n" "${_setvars% }" @@ -47,12 +53,9 @@ xbmk_init() id -u 1>/dev/null 2>/dev/null || $err "suid check failed (id -u)" [ "$(id -u)" != "0" ] || $err "this command as root is not permitted" - for fv in version versiondate; do - eval "[ ! -f \".$fv\" ] || read -r $fv < \".$fv\" || :" - done - - for xbmk_cmd in setpyver init_vars init_ver xbmk_child_init; do - $xbmk_cmd "$@" + for init_cmd in set_pyver set_env set_version git_init create_tmpdir \ + lock create_pathdirs child_exec; do + xbmk_$init_cmd "$@" || break done } @@ -86,7 +89,7 @@ chkvars() done; : } -setpyver() +xbmk_set_pyver() { pyv="import sys; print(sys.version_info[:])" python="python3" @@ -136,7 +139,7 @@ pybin() command -v "$1" 2>/dev/null || return 1 } -init_vars() +xbmk_set_env() { # XBMK_CACHE is a directory, for caching downloads and git repon [ -z "${XBMK_CACHE+x}" ] && export XBMK_CACHE="$xbmkpwd/cache" @@ -153,16 +156,20 @@ init_vars() [ -z "${XBMK_THREADS+x}" ] && export XBMK_THREADS=1 expr "X$XBMK_THREADS" : "X-\{0,1\}[0123456789][0123456789]*$" \ - 1>/dev/null 2>/dev/null || export XBMK_THREADS=1 + 1>/dev/null 2>/dev/null || export XBMK_THREADS=1; : +} + +xbmk_set_version() +{ + for fv in version versiondate; do + eval "[ ! -f \".$fv\" ] || read -r $fv < \".$fv\" || :" + done [ -e ".git" ] || [ -f ".version" ] || printf "unknown\n" > .version \ || $err "Cannot generate unknown .version file" [ -e ".git" ] || [ -f ".versiondate" ] || printf "1716415872\n" > \ - .versiondate || $err "Cannot generate unknown .versiondate file" -} + .versiondate || $err "Cannot generate unknown .versiondate file"; : -init_ver() -{ version_="$version" [ ! -e ".git" ] || version="$(git describe --tags HEAD 2>&1)" || \ version="git-$(git rev-parse HEAD 2>&1)" || version="$version_" @@ -178,22 +185,47 @@ init_ver() export LOCALVERSION="-$projectname-${version%%-*}" } -# if this instance is the main parent, re-run as a child process and exit. -xbmk_child_init() +xbmk_git_init() +{ + [ -L ".git" ] && return 1 + [ -e ".git" ] && return 0 + eval "`setvars "$(date -Rud @$versiondate)" cdate _nogit`" + + x_ git init 1>/dev/null 2>/dev/null + x_ git add -A . 1>/dev/null 2>/dev/null + x_ git commit -m "$projectname $version" --date "$cdate" \ + --author="xbmk <xbmk@example.com>" 1>/dev/null 2>/dev/null + x_ git tag -a "$version" -m "$projectname $version" 1>/dev/null \ + 2>/dev/null + + for gitarg in "--global user.name" "--global user.email"; do + gitcmd="git config $gitarg"; $gitcmd || $err \ + "Please run this first: $gitcmd \"your ${gitcmd##*.}\"" + done +} + +xbmk_create_tmpdir() { # unify all temporary files/directories in a single TMPDIR [ -z "${TMPDIR+x}" ] || [ "${TMPDIR%_*}" = "/tmp/xbmk" ] || \ unset TMPDIR [ -n "${TMPDIR+x}" ] && export TMPDIR="$TMPDIR" && xbmktmp="$TMPDIR" - [ -z "${TMPDIR+x}" ] || return 0 # this is a child instance, so return + [ -z "${TMPDIR+x}" ] || return 1 # child instance, so return # parent instance of xbmk, so don't return. set up TMPDIR - # and re-run as a child instance: - [ -f "lock" ] && $err "$xbmkpwd/lock exists. Is a build running?" export TMPDIR="/tmp" export TMPDIR="$(mktemp -d -t xbmk_XXXXXXXX)" xbmktmp="$TMPDIR" - touch lock || $err "cannot create 'lock' file" +} + +xbmk_lock() +{ + [ -f "lock" ] && $err "$xbmkpwd/lock exists. Is a build running?" + touch lock || $err "cannot create 'lock' file"; : +} + +xbmk_create_pathdirs() +{ x_ rm -Rf "$XBMK_CACHE/xbmkpath" "$XBMK_CACHE/gnupath" x_ mkdir -p "$XBMK_CACHE/gnupath" "$XBMK_CACHE/xbmkpath" export PATH="$XBMK_CACHE/xbmkpath:$XBMK_CACHE/gnupath:$PATH" @@ -202,10 +234,13 @@ xbmk_child_init() # see code above that detected the correct python3 command. cd "$XBMK_CACHE/xbmkpath" || $err "can't cd $XBMK_CACHE/xbmkpath" x_ ln -s "`pybin "$python"`" python - ) || $err "Can't set up python symlink in $XBMK_CACHE/xbmkpath" + ) || $err "Can't set up python symlink in $XBMK_CACHE/xbmkpath"; : +} +xbmk_child_exec() +{ xbmk_rval=0 - ./mk "$@" || xbmk_rval=1 + ( x_ ./mk "$@" ) || xbmk_rval=1 rm -Rf "$xbmktmp" || xbmk_rval=1 rm -f lock || xbmk_rval=1 exit $xbmk_rval @@ -23,11 +23,6 @@ main() { cmd="" && [ $# -gt 0 ] && cmd="$1" && shift 1 - for g in "command -v git" "git config --global user.name" \ - "git config --global user.email" "git_init"; do - eval "$g 1>/dev/null 2>/dev/null || $err \"Unconfigured: $g\"" - done - case "$cmd" in version) printf "%s\nWebsite: %s\n" "$relname" "$projectsite" ;; release|download|inject) $cmd "$@" ;; @@ -37,19 +32,6 @@ main() set -u -e # some commands disable them. turn them on! } -git_init() -{ - [ -L ".git" ] && return 1 - [ -e ".git" ] && return 0 - eval "`setvars "$(date -Rud @$versiondate)" cdate _nogit`" - - git init || return 1 - git add -A . || return 1 - git commit -m "$projectname $version" --date "$cdate" \ - --author="xbmk <xbmk@example.com>" || return 1 - git tag -a "$version" -m "$projectname $version" || return 1 -} - release() { export XBMK_RELEASE="y" |