mirror of
https://github.com/tonydamage/nux-env.git
synced 2025-12-11 13:24:28 +01:00
174 lines
4.1 KiB
Text
Executable file
174 lines
4.1 KiB
Text
Executable file
#!/usr/bin/env nux-runner
|
|
|
|
### Filesystem Layout manager
|
|
###
|
|
local STARTDIR=$(pwd)
|
|
local TEMPLATE_DIR=$NUX_ENV_DIR/templates
|
|
local SUFFIX=".nuxfs"
|
|
local TEMPLATE_FILTER="*$SUFFIX"
|
|
|
|
nux.include nuxfs
|
|
nux.include nuxfs.dsl
|
|
|
|
GIT_BIN=$(which git)
|
|
## check - Verifies that directory matches nuxfs specification
|
|
function task.check {
|
|
link.exists() {
|
|
nux.log debug "Testing '$1' as link"
|
|
if test ! -h "$1"; then
|
|
nuxfs.error "$1" "is not symlink."
|
|
return
|
|
fi
|
|
local REAL_LINK=$(readlink "$1")
|
|
local TARGET="$2";
|
|
if test ! "$REAL_LINK" = "$TARGET"; then
|
|
MAT_REAL=$(realpath "$REAL_LINK")
|
|
local cdir=$(dirname "$1")
|
|
MAT_TARGET=$(realpath "$cdir/$TARGET")
|
|
if test "$MAT_REAL" = "$MAT_TARGET"; then
|
|
nuxfs.warning "$1" "is using different definition for target '$2'"
|
|
else
|
|
nuxfs.error "$1" "links to $REAL_LINK instead of $TARGET"
|
|
return
|
|
fi
|
|
fi
|
|
if test ! -e "$1"; then
|
|
nuxfs.warning "$1" "target '$NC_White$2$NC_No' does not exists."
|
|
fi
|
|
}
|
|
git.exists() {
|
|
nux.log debug "Testing '$1' as git repository"
|
|
if test ! -e "$1/.git"; then
|
|
nuxfs.error "$1" "is not git repository"
|
|
return
|
|
fi
|
|
local remotes=$(grep "$2" "$1/.git/config" | wc -l)
|
|
if [ $remotes -eq 0 ]; then
|
|
nuxfs.error "$1" "Does not refer git remote '$2'"
|
|
return;
|
|
fi
|
|
}
|
|
def.notexists() {
|
|
nuxfs.error "$1" "does not exists".
|
|
}
|
|
nuxfs.initcfg "$@"
|
|
nuxfs.dsl.execute "$NUXFS_DEF" "$NUXFS_DEF_DIR" "$WORKDIR_ABSOLUTE"
|
|
}
|
|
|
|
## apply - Creates missing files as described in nuxfs definition.
|
|
function task.apply {
|
|
directory.notexists() {
|
|
nuxfs.info "$1" "Created directory";
|
|
mkdir -p "$1"
|
|
|
|
}
|
|
|
|
link.notexists() {
|
|
nuxfs.info "$1" "Creating link to '$2'";
|
|
ln -s "$2" "$1"
|
|
}
|
|
|
|
git.notexists() {
|
|
local cur_dir=$(nuxfs.dir.get);
|
|
local rel_path=$(realpath -Lms $1 --relative-to $cur_dir)
|
|
pushd $(nuxfs.dir.get) > /dev/null;
|
|
$GIT_BIN clone "$2" $rel_path
|
|
popd > /dev/null;
|
|
}
|
|
|
|
nuxfs.initcfg "$@"
|
|
nuxfs.dsl.execute "$NUXFS_DEF" "$NUXFS_DEF_DIR" "$WORKDIR_ABSOLUTE"
|
|
}
|
|
|
|
## init - Initializes a directory using template
|
|
function task.init {
|
|
if [ $# -eq 0 ]; then
|
|
nux.log debug "No template specified. Creating empty $SUFFIX definition."
|
|
touch .nuxfs
|
|
return;
|
|
fi
|
|
local TEMPLATE=$1
|
|
nux.log debug "User specified template is " $TEMPLATE
|
|
if [ $(echo $TEMPLATE | grep -c "$SUFFIX\$") -eq 0 ]; then
|
|
nux.log debug "Template is common template."
|
|
TEMPLATE=$TEMPLATE_DIR/$TEMPLATE$SUFFIX
|
|
if [ ! -e $TEMPLATE ]; then
|
|
echo -n "Template '$1' does not exists. "
|
|
nuxfs.template.list
|
|
return;
|
|
fi;
|
|
|
|
fi;
|
|
nux.log debug "Using '$TEMPLATE' to initialize."
|
|
if [ ! -e $TEMPLATE ]; then
|
|
echo "nuxfs template $1 does not exists."
|
|
return;
|
|
fi;
|
|
local template_relative=$(realpath -Lms $TEMPLATE --relative-to $(pwd))
|
|
nux.log debug "Creating link $SUFFIX: target is '$template_relative'";
|
|
ln -s "$template_relative" "$SUFFIX"
|
|
nux.log debug "Invoking create task."
|
|
task.create
|
|
}
|
|
|
|
##
|
|
## template - List available templates
|
|
#
|
|
function task.template {
|
|
nux.log debug $NUX_ENV_DIR
|
|
|
|
nuxfs.template.list
|
|
}
|
|
|
|
function task.info {
|
|
nuxfs.initcfg;
|
|
if [ -n "$NUXFS_DEF" ]; then
|
|
MANAGED_RELATIVE=$(realpath $NUXFS_DEF_DIR --relative-to $(pwd));
|
|
|
|
if [ "$MANAGED_RELATIVE" = . ]; then
|
|
echo $(pwd) is nuxfs managed directory.
|
|
else
|
|
echo $(pwd) is child of nuxfs managed directory.
|
|
echo Managed directory is $NUXFS_DEF_DIR.
|
|
fi;
|
|
else
|
|
echo "$(pwd) is not managed by nuxfs";
|
|
|
|
fi;
|
|
}
|
|
|
|
function nuxfs.template.list {
|
|
echo "Available templates:";
|
|
pushd $TEMPLATE_DIR > /dev/null;
|
|
for i in $TEMPLATE_FILTER; do
|
|
local TEMPLATE_ID=$(basename $i $SUFFIX)
|
|
echo -n " $TEMPLATE_ID - " ;
|
|
grep -m1 "^name " $i | sed -e "s/name *//"
|
|
echo
|
|
done;
|
|
popd > /dev/null;
|
|
}
|
|
|
|
|
|
function nuxfs.initcfg {
|
|
|
|
WORKDIR=$1;
|
|
if [ -n "$WORKDIR" ]; then
|
|
WORKDIR=$WORKDIR
|
|
else
|
|
WORKDIR=$(pwd);
|
|
fi;
|
|
|
|
nux.log debug Target: $WORKDIR
|
|
|
|
NUXFS_DEF=$(nuxfs.closest $SUFFIX "$WORKDIR");
|
|
|
|
if [ "$NUXFS_DEF" = "" ]; then
|
|
nuxfs.error $(pwd) "No nuxfs configuration found."
|
|
return;
|
|
fi;
|
|
NUXFS_DEF_DIR=$(dirname $NUXFS_DEF);
|
|
WORKDIR_RELATIVE=$(realpath -ms "$WORKDIR" --relative-to "$NUXFS_DEF_DIR")
|
|
WORKDIR_ABSOLUTE=$(realpath -ms "$WORKDIR")
|
|
|
|
}
|