Compare commits

...

4 Commits

Author SHA1 Message Date
Lucas Frérot 68683c9c97
added test script 2024-12-31 13:36:00 +01:00
Lucas Frérot 38eecf81eb
added info feedback 2024-12-31 13:35:47 +01:00
Lucas Frérot e074531163
do not set global values for git variables 2024-12-31 13:35:11 +01:00
Lucas Frérot 2781ddf6a3
added conditional prompt function 2024-12-31 13:34:53 +01:00
2 changed files with 80 additions and 14 deletions

51
rtenets
View File

@ -77,10 +77,23 @@ alt_var() {
if is_set "${variable}"; then if is_set "${variable}"; then
printf "%s" "$(eval "printf \"%s\" \"\${${variable}}\"")" printf "%s" "$(eval "printf \"%s\" \"\${${variable}}\"")"
else else
printf "%s" "$value_if_unset" printf "%s" "${value_if_unset}"
fi fi
} }
# Enter value if unset
cond_enter() {
local input="$1"
local var_name="$2"
local value="$(alt_var "" "${var_name}")"
if [[ "${value}" == "" ]]; then
value="$(enter "${input}")"
fi
printf "%s" "${value}"
}
# Check that command exists # Check that command exists
has_command() { has_command() {
command -v "$1" >/dev/null 2>&1 command -v "$1" >/dev/null 2>&1
@ -139,15 +152,15 @@ set_git_config() {
while ! [[ -n "${value}" ]]; do while ! [[ -n "${value}" ]]; do
value="$(enter "new value for ${param}: ")" value="$(enter "new value for ${param}: ")"
done done
\git config --global "${param}" "${value}" \git config "${param}" "${value}"
info "setting new value for ${param}: '$(git config "${param}")'" info "setting new value for ${param}: '$(\git config "${param}")'"
printf "${value}" printf "${value}"
} }
# Get value of git config parameter, set if unset # Get value of git config parameter, set if unset
get_git_config() { get_git_config() {
local param="$1" local param="$1"
local value="$(git config "${param}")" local value="$(\git config "${param}")"
if ! [[ -n "${value}" ]]; then if ! [[ -n "${value}" ]]; then
warning "git ${param} is unset" warning "git ${param} is unset"
value="$(set_git_config "${param}")" value="$(set_git_config "${param}")"
@ -169,7 +182,7 @@ check_git_config() {
# Initialize git repository # Initialize git repository
init_repo() { init_repo() {
check_git_config check_git_config
\git init info "$(\git init)"
} }
# ----------------- Tree commands ----------------------- # ----------------- Tree commands -----------------------
@ -194,6 +207,8 @@ main "\$@"
STUB STUB
chmod +x "${script_name}" chmod +x "${script_name}"
fi fi
info "wrote '${script_name}'"
} }
# Fetch licence # Fetch licence
@ -203,7 +218,8 @@ fetch_licence() {
if ! [[ -f "${licence}" ]]; then if ! [[ -f "${licence}" ]]; then
if has_command curl; then if has_command curl; then
info "setting licence to GPL by default, see https://www.gnu.org/licenses for more options" info "setting licence to GPL by default, see https://www.gnu.org/licenses for more options"
\curl "https://www.gnu.org/licenses/gpl-3.0.txt" > "${licence}" \curl -s "https://www.gnu.org/licenses/gpl-3.0.txt" > "${licence}"
info "wrote '${licence}'"
else else
warning "please choose a free software licence, see https://www.gnu.org/licenses" warning "please choose a free software licence, see https://www.gnu.org/licenses"
fi fi
@ -215,8 +231,8 @@ create_readme() {
local readme="README.md~" local readme="README.md~"
if ! [[ -f "${readme}" ]]; then if ! [[ -f "${readme}" ]]; then
local project_name="$(enter "project name: ")" local project_name="$(cond_enter "project name: " PROJECT_NAME)"
local project_desc="$(enter "project short description: ")" local project_desc="$(cond_enter "project short description: " PROJECT_DESC)"
cat << READMEMSG > "${readme}" cat << READMEMSG > "${readme}"
# ${project_name} # ${project_name}
@ -254,6 +270,7 @@ create_authors_file() {
if ! [[ -f AUTHORS ]]; then if ! [[ -f AUTHORS ]]; then
printf "%s\\n" "${USER} <${EMAIL}> ${AFFILIATION}" > AUTHORS printf "%s\\n" "${USER} <${EMAIL}> ${AFFILIATION}" > AUTHORS
fi fi
info "wrote 'AUTHORS'"
} }
# Create required files # Create required files
@ -320,7 +337,7 @@ setup_dalembert_gitea() {
local remote_ssh="$(jq '.ssh_url' <<< "${repo_json}")" local remote_ssh="$(jq '.ssh_url' <<< "${repo_json}")"
local remote_http="$(jq '.clone_url' <<< "${repo_json}")" local remote_http="$(jq '.clone_url' <<< "${repo_json}")"
if [[ "$(\git remote | \grep -c '^dalembert$')" == "0" ]]; then if [[ "$(\git remote | \grep -c '^dalembert$' || true)" == "0" ]]; then
\git remote add dalembert "${remote_ssh}" \git remote add dalembert "${remote_ssh}"
info "created remote dalembert with '${remote_ssh}" info "created remote dalembert with '${remote_ssh}"
else else
@ -337,14 +354,19 @@ init-tree() {
declare desc="usage: rtenets init-tree <directory>" declare desc="usage: rtenets init-tree <directory>"
local directory="$1" local directory="$1"
(
cd "${directory}"
init_repo
create_tenet_file_tree
)
} }
init-gitea() { init-gitea() {
true declare desc="usage: rtenets init-gitea <directory>"
} }
init-workflow() { init-workflow() {
true declare desc="usage: rtenets init-workflow <directory>"
} }
# Create git repository # Create git repository
@ -358,14 +380,13 @@ create() {
cd "${repo_name}" cd "${repo_name}"
init_repo init_repo
create_tenet_file_tree create_tenet_file_tree
setup_dalembert_gitea
) )
} }
# Print usage and exit # Print usage and exit
usage() { usage() {
cat <<USAGE cat <<USAGE
usage: $0 [--help,-h] [--version] command [args...] usage: $0 [--help,-h] [--version,-v] command [args...]
Available commands: Available commands:
- create: create and populate a repository - create: create and populate a repository
@ -424,4 +445,6 @@ main() {
"${COMMANDS[${command:-default}]:-${COMMANDS[default]}}" "${other_args}" "${COMMANDS[${command:-default}]:-${COMMANDS[default]}}" "${other_args}"
} }
main "$@" # Avoid executing main if sourced
# https://stackoverflow.com/questions/2683279/how-to-detect-if-a-script-is-being-sourced
(return 0 2&>/dev/null) && main "$@" || true

43
tests/run_all_tests Executable file
View File

@ -0,0 +1,43 @@
#!/usr/bin/env bash
set -euo pipefail
source ../rtenets
test_init-tree() {
info "running test_init-tree"
init-tree .
# Test directory is a git repo
\git status > /dev/null 2>&1 \
|| ( echo "git failed: $PWD is not a repo"; exit 1 )
# Test config values
[[ "$(\git config user.name)" != "" ]] \
&& [[ "$(\git config user.email)" != "" ]] \
|| ( echo "git config failed"; exit 1 )
# Test file structure
mandatory_files=("README.md~"
"AUTHORS"
"COPYING"
"make_all_figures"
"tests/run_all_tests")
for file in ${mandatory_files[*]}; do
[[ -f "${file}" ]] || ( echo "file ${file} is missig"; exit 1 )
done
info "finished test_init-tree"
}
main() {
readonly PROJECT_NAME="TMP PROJECT"
readonly PROJECT_DESC="TMP DESCRIPTION"
local tmpdir="$(mktemp -d)"
(
cd "${tmpdir}"
test_init-tree
)
}
main "$@"