Start documentation
This commit is contained in:
parent
079bd0ee07
commit
f2884d4606
8
.idea/.gitignore
vendored
Normal file
8
.idea/.gitignore
vendored
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
|
# Datasource local storage ignored files
|
||||||
|
/dataSources/
|
||||||
|
/dataSources.local.xml
|
||||||
|
# Editor-based HTTP Client requests
|
||||||
|
/httpRequests/
|
8
.idea/g.bash.iml
Normal file
8
.idea/g.bash.iml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="WEB_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager">
|
||||||
|
<content url="file://$MODULE_DIR$" />
|
||||||
|
<orderEntry type="inheritedJdk" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
</module>
|
8
.idea/modules.xml
Normal file
8
.idea/modules.xml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/.idea/g.bash.iml" filepath="$PROJECT_DIR$/.idea/g.bash.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
6
.idea/vcs.xml
Normal file
6
.idea/vcs.xml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
33
example.bash
33
example.bash
@ -1,6 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
source src/g.bash
|
source src/g.bash
|
||||||
|
shopt -s expand_aliases
|
||||||
|
|
||||||
g::log::setLevel internal
|
g::log::setLevel internal
|
||||||
g::log::enableTarget g::arg
|
g::log::enableTarget g::arg
|
||||||
@ -14,7 +15,7 @@ g::app::command::arg name "The name of the shell"
|
|||||||
g::app::command::flag no-tty "Disable TTY output"
|
g::app::command::flag no-tty "Disable TTY output"
|
||||||
|
|
||||||
function app::ex::shell() {
|
function app::ex::shell() {
|
||||||
echo "Starting shell: '$@'"
|
echo "Starting shell: '$*'"
|
||||||
}
|
}
|
||||||
|
|
||||||
g::app::command ls "List contents of the directory"
|
g::app::command ls "List contents of the directory"
|
||||||
@ -25,21 +26,25 @@ g::app::command::arg name "Name of the ls"
|
|||||||
|
|
||||||
function app::ex::ls() {
|
function app::ex::ls() {
|
||||||
local args="$1"
|
local args="$1"
|
||||||
echo "Argcall: $args::arg"
|
|
||||||
echo "Arg1: $($args::arg name)"
|
|
||||||
|
|
||||||
echo "Arg1: $(g::arg $g__APP_LAST_ARGPARSE 0)"
|
g::lock::try
|
||||||
echo "Arg2: $(g::arg $g__APP_LAST_ARGPARSE name)"
|
|
||||||
|
|
||||||
echo "Dir: $(g::flag $g__APP_LAST_ARGPARSE dir)"
|
# alias
|
||||||
echo "Fubar: $(g::flag $g__APP_LAST_ARGPARSE fubar)"
|
# echo "Argcall: $args::arg"
|
||||||
echo "dry-run: $(g::flag $g__APP_LAST_ARGPARSE dry-run)"
|
# echo "Arg1: $($args::arg name)"
|
||||||
|
#
|
||||||
if g::arg::has $g__APP_LAST_ARGPARSE 0; then
|
# echo "Arg1: $(g::arg $g__APP_LAST_ARGPARSE 0)"
|
||||||
echo "Has arg0"
|
# echo "Arg2: $(g::arg $g__APP_LAST_ARGPARSE name)"
|
||||||
fi
|
#
|
||||||
|
# echo "Dir: $(g::flag $g__APP_LAST_ARGPARSE dir)"
|
||||||
echo "All args: $(g::args $g__APP_LAST_ARGPARSE)"
|
# echo "Fubar: $(g::flag $g__APP_LAST_ARGPARSE fubar)"
|
||||||
|
# echo "dry-run: $(g::flag $g__APP_LAST_ARGPARSE dry-run)"
|
||||||
|
#
|
||||||
|
# if g::arg::has $g__APP_LAST_ARGPARSE 0; then
|
||||||
|
# echo "Has arg0"
|
||||||
|
# fi
|
||||||
|
#
|
||||||
|
# echo "All args: $(g::args $g__APP_LAST_ARGPARSE)"
|
||||||
}
|
}
|
||||||
|
|
||||||
g::app::invoke "$@"
|
g::app::invoke "$@"
|
||||||
|
119
src/g.bash
119
src/g.bash
@ -1685,6 +1685,13 @@ function g::app::command::parse::has::flag() {
|
|||||||
return $(g::util::false)
|
return $(g::util::false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
##
|
||||||
|
# Register the value of a positional argument in an argument set.
|
||||||
|
#
|
||||||
|
# @param position
|
||||||
|
# @param value
|
||||||
|
# @param uuid - the identifier of the argument set
|
||||||
|
#
|
||||||
function g::app::command::parse::register::arg() {
|
function g::app::command::parse::register::arg() {
|
||||||
local position="$1"
|
local position="$1"
|
||||||
local value="$2"
|
local value="$2"
|
||||||
@ -1695,6 +1702,13 @@ function g::app::command::parse::register::arg() {
|
|||||||
g::app::set "$varName" "$value"
|
g::app::set "$varName" "$value"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
##
|
||||||
|
# Get the value of a positional argument in an argument set.
|
||||||
|
#
|
||||||
|
# @param position - the argument position
|
||||||
|
# @param uuid - the argument set identifier
|
||||||
|
# @echo the argument value
|
||||||
|
#
|
||||||
function g::app::command::parse::get::arg() {
|
function g::app::command::parse::get::arg() {
|
||||||
local position="$1"
|
local position="$1"
|
||||||
local uuid="$2"
|
local uuid="$2"
|
||||||
@ -1704,6 +1718,13 @@ function g::app::command::parse::get::arg() {
|
|||||||
g::app::get "$varName"
|
g::app::get "$varName"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
##
|
||||||
|
# Check if an argument set has an argument for the given position.
|
||||||
|
#
|
||||||
|
# @param position - the argument position
|
||||||
|
# @param uuid - the argument set identifier
|
||||||
|
# @return true if the argument exists
|
||||||
|
#
|
||||||
function g::app::command::parse::has::arg() {
|
function g::app::command::parse::has::arg() {
|
||||||
local position="$1"
|
local position="$1"
|
||||||
local uuid="$2"
|
local uuid="$2"
|
||||||
@ -1717,6 +1738,14 @@ function g::app::command::parse::has::arg() {
|
|||||||
return $(g::util::false)
|
return $(g::util::false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
##
|
||||||
|
# Parse a raw argument string for the given command and create a new argument set.
|
||||||
|
#
|
||||||
|
# Sets the argument set identifier in $g__APP_LAST_ARGPARSE.
|
||||||
|
#
|
||||||
|
# @param cmdName - the identifier of the command the arguments are for
|
||||||
|
# @param ...args - the raw arguments
|
||||||
|
#
|
||||||
function g::app::command::parse() {
|
function g::app::command::parse() {
|
||||||
local cmdName="$1"
|
local cmdName="$1"
|
||||||
shift 1
|
shift 1
|
||||||
@ -1841,6 +1870,12 @@ function g::app::command::parse() {
|
|||||||
g__APP_LAST_ARGPARSE="$groupUuid"
|
g__APP_LAST_ARGPARSE="$groupUuid"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
##
|
||||||
|
# Validate the parsed arguments for the given argument set.
|
||||||
|
#
|
||||||
|
# @param cmdName - the identifier of the command the arguments are for
|
||||||
|
# @param groupUuid - the identifier of the argument set
|
||||||
|
#
|
||||||
function g::app::command::validate() {
|
function g::app::command::validate() {
|
||||||
local cmdName="$1"
|
local cmdName="$1"
|
||||||
local groupUuid="$2"
|
local groupUuid="$2"
|
||||||
@ -1872,6 +1907,11 @@ function g::app::command::validate() {
|
|||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
##
|
||||||
|
# Print a usage message for the current application.
|
||||||
|
#
|
||||||
|
# @echo the message
|
||||||
|
#
|
||||||
function g::app::usage() {
|
function g::app::usage() {
|
||||||
local header="$g__APP_CURRENT_NAME"
|
local header="$g__APP_CURRENT_NAME"
|
||||||
local description="$(g::app::get DESCRIPTION)"
|
local description="$(g::app::get DESCRIPTION)"
|
||||||
@ -1904,6 +1944,12 @@ function g::app::usage() {
|
|||||||
echo "$commandsString"
|
echo "$commandsString"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
##
|
||||||
|
# Invoke a command in the current application with some arguments.
|
||||||
|
#
|
||||||
|
# @param commandName - the identifier of the command
|
||||||
|
# @param ...args - the arguments
|
||||||
|
#
|
||||||
function g::app::invoke() {
|
function g::app::invoke() {
|
||||||
local commandName="${1:-}"
|
local commandName="${1:-}"
|
||||||
shift 1
|
shift 1
|
||||||
@ -1943,6 +1989,7 @@ function g::app::invoke() {
|
|||||||
g::error "Run '$(basename $g__CALLER_PATH) help' to view usage."
|
g::error "Run '$(basename $g__CALLER_PATH) help' to view usage."
|
||||||
}
|
}
|
||||||
|
|
||||||
|
## WIP
|
||||||
function g::args::buildAlias() {
|
function g::args::buildAlias() {
|
||||||
local uuid="$1"
|
local uuid="$1"
|
||||||
|
|
||||||
@ -1955,6 +2002,13 @@ function g::args::buildAlias() {
|
|||||||
g__APP_LAST_ALIAS="g::args::alias::${uuid}"
|
g__APP_LAST_ALIAS="g::args::alias::${uuid}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
##
|
||||||
|
# Get the raw arguments for a given argument set.
|
||||||
|
# This is akin to $@ in a normal invocation.
|
||||||
|
#
|
||||||
|
# @param uuid - the identifier of the argument set
|
||||||
|
# @echo the raw argument string
|
||||||
|
#
|
||||||
function g::args() {
|
function g::args() {
|
||||||
local uuid="$1"
|
local uuid="$1"
|
||||||
|
|
||||||
@ -1966,6 +2020,13 @@ function g::args() {
|
|||||||
g::app::get "$allVar"
|
g::app::get "$allVar"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
##
|
||||||
|
# Get the value of a given argument in an argument set.
|
||||||
|
#
|
||||||
|
# @param uuid - the identifier of the argument set
|
||||||
|
# @param nameOrPosition - the argument name or index
|
||||||
|
# @echo the argument value
|
||||||
|
#
|
||||||
function g::arg() {
|
function g::arg() {
|
||||||
local uuid="$1"
|
local uuid="$1"
|
||||||
local nameOrPosition="$2"
|
local nameOrPosition="$2"
|
||||||
@ -1983,6 +2044,13 @@ function g::arg() {
|
|||||||
g::app::command::parse::get::arg "$nameOrPosition" "$uuid"
|
g::app::command::parse::get::arg "$nameOrPosition" "$uuid"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
##
|
||||||
|
# Check if the given argument set has the given argument.
|
||||||
|
#
|
||||||
|
# @param uuid - the identifier of the argument set
|
||||||
|
# @param nameOrPosition - the argument name or index
|
||||||
|
# @return true if the argument is set
|
||||||
|
#
|
||||||
function g::arg::has() {
|
function g::arg::has() {
|
||||||
local uuid="$1"
|
local uuid="$1"
|
||||||
local nameOrPosition="$2"
|
local nameOrPosition="$2"
|
||||||
@ -2000,6 +2068,13 @@ function g::arg::has() {
|
|||||||
return $(g::app::command::parse::has::arg "$nameOrPosition" "$uuid")
|
return $(g::app::command::parse::has::arg "$nameOrPosition" "$uuid")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
##
|
||||||
|
# Get the value of a given flag in an argument set.
|
||||||
|
#
|
||||||
|
# @param uuid - the identifier of the argument set
|
||||||
|
# @param nameOrPosition - the flag name
|
||||||
|
# @echo the flag value
|
||||||
|
#
|
||||||
function g::flag() {
|
function g::flag() {
|
||||||
local uuid="$1"
|
local uuid="$1"
|
||||||
local nameOrPosition="$2"
|
local nameOrPosition="$2"
|
||||||
@ -2017,6 +2092,13 @@ function g::flag() {
|
|||||||
g::app::command::parse::get::flag "$nameOrPosition" "$uuid"
|
g::app::command::parse::get::flag "$nameOrPosition" "$uuid"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
##
|
||||||
|
# Check if the given argument set has a given flag.
|
||||||
|
#
|
||||||
|
# @param uuid - the identifier of the argument set
|
||||||
|
# @param nameOrPosition - the flag name
|
||||||
|
# @return true if the flag is set
|
||||||
|
#
|
||||||
function g::flag::has() {
|
function g::flag::has() {
|
||||||
local uuid="$1"
|
local uuid="$1"
|
||||||
local nameOrPosition="$2"
|
local nameOrPosition="$2"
|
||||||
@ -2037,6 +2119,12 @@ function g::flag::has() {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
##
|
||||||
|
# Try to acquire the given lock.
|
||||||
|
#
|
||||||
|
# @param lockName
|
||||||
|
# @return true if acquired
|
||||||
|
#
|
||||||
function g::lock::try() {
|
function g::lock::try() {
|
||||||
local lockName="$1"
|
local lockName="$1"
|
||||||
|
|
||||||
@ -2054,6 +2142,11 @@ function g::lock::try() {
|
|||||||
return $(g::util::false)
|
return $(g::util::false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
##
|
||||||
|
# Acquire the given lock, sleeping between retries.
|
||||||
|
#
|
||||||
|
# @param lockName
|
||||||
|
#
|
||||||
function g::lock::acquire() {
|
function g::lock::acquire() {
|
||||||
local lockName="$1"
|
local lockName="$1"
|
||||||
while ! g::lock::try "$lockName"; do
|
while ! g::lock::try "$lockName"; do
|
||||||
@ -2061,11 +2154,22 @@ function g::lock::acquire() {
|
|||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
##
|
||||||
|
# Returns true if the current process holds the lock.
|
||||||
|
#
|
||||||
|
# @param lockName
|
||||||
|
# @return true if held
|
||||||
|
#
|
||||||
function g::lock::holds() {
|
function g::lock::holds() {
|
||||||
local lockName="$1"
|
local lockName="$1"
|
||||||
return $(g::arr::includes "$lockName" "${g__LOCKING_HOLDS[@]}")
|
return $(g::arr::includes "$lockName" "${g__LOCKING_HOLDS[@]}")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
##
|
||||||
|
# Release a lock if held. Throw otherwise.
|
||||||
|
#
|
||||||
|
# @param lockName
|
||||||
|
#
|
||||||
function g::lock::release() {
|
function g::lock::release() {
|
||||||
local lockName="$1"
|
local lockName="$1"
|
||||||
|
|
||||||
@ -2079,6 +2183,9 @@ function g::lock::release() {
|
|||||||
g__LOCKING_HOLDS=("${g__LOCKING_HOLDS[@]/$lockName}")
|
g__LOCKING_HOLDS=("${g__LOCKING_HOLDS[@]/$lockName}")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
##
|
||||||
|
# Release all held locks before exit.
|
||||||
|
#
|
||||||
function g::lock::cleanupForExit() {
|
function g::lock::cleanupForExit() {
|
||||||
for lockFile in "${g__LOCKING_HOLDS[@]}"; do
|
for lockFile in "${g__LOCKING_HOLDS[@]}"; do
|
||||||
g::internal "Releasing lockfile: $lockFile"
|
g::internal "Releasing lockfile: $lockFile"
|
||||||
@ -2086,16 +2193,28 @@ function g::lock::cleanupForExit() {
|
|||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
##
|
||||||
|
# Try to acquire the lock for this script's unique caller name.
|
||||||
|
# Throw an error if we are unable to acquire it.
|
||||||
|
#
|
||||||
function g::lock::singleton() {
|
function g::lock::singleton() {
|
||||||
if ! g::lock::try "$(g::lock::uniqueCallerName)"; then
|
if ! g::lock::try "$(g::lock::uniqueCallerName)"; then
|
||||||
g::error::throw "Another instance of this script is already running."
|
g::error::throw "Another instance of this script is already running."
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
##
|
||||||
|
# Acquire the lock for this script's unique caller name.
|
||||||
|
#
|
||||||
function g::lock::singleton::acquire() {
|
function g::lock::singleton::acquire() {
|
||||||
g::lock::acquire "$(g::lock::uniqueCallerName)"
|
g::lock::acquire "$(g::lock::uniqueCallerName)"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
##
|
||||||
|
# Generate a file-safe name unique to the caller script.
|
||||||
|
#
|
||||||
|
# @echo the unique name
|
||||||
|
#
|
||||||
function g::lock::uniqueCallerName() {
|
function g::lock::uniqueCallerName() {
|
||||||
g::str::replace "$g__CALLER_PATH" '/' '__'
|
g::str::replace "$g__CALLER_PATH" '/' '__'
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user