From 4cbcb39e2007338c1c6ec17376c14b841ce6f733 Mon Sep 17 00:00:00 2001 From: danix Date: Thu, 13 Apr 2023 15:27:16 +0200 Subject: [PATCH] initial setup of git functionality. The program can now initalize a local repo and add a remote. --- Makefile | 2 +- SOURCE/CORE/git.sh | 38 ++++++++++++++++++++++++++++++++ SOURCE/head.sh | 11 +++++++++- SOURCE/main.sh | 6 ++++- notes.sh | 55 ++++++++++++++++++++++++++++++++++++++++++++-- 5 files changed, 107 insertions(+), 5 deletions(-) create mode 100644 SOURCE/CORE/git.sh diff --git a/Makefile b/Makefile index 0875513..ca269ca 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ all: notes.sh -notes.sh: SOURCE/head.sh SOURCE/CORE/helpers.sh SOURCE/CORE/core-* SOURCE/main.sh +notes.sh: SOURCE/head.sh SOURCE/CORE/helpers.sh SOURCE/CORE/git.sh SOURCE/CORE/core-* SOURCE/main.sh cat $^ > "$@" || (rm -f "$@"; exit 1) chmod 755 "$@" diff --git a/SOURCE/CORE/git.sh b/SOURCE/CORE/git.sh new file mode 100644 index 0000000..d37fe72 --- /dev/null +++ b/SOURCE/CORE/git.sh @@ -0,0 +1,38 @@ +# returns true if the argument provided directory is a git repository +is_git_repo() { + DIR=$1 + if [[ -d $DIR ]]; then + cd $DIR + if git rev-parse 2>/dev/null; then + true + else + false + fi + fi +} + +# sync local repository to remote +gitsync() { + echo "Syncing notes with git on remote \"$GITREMOTE\"" + cd $BASEDIR + $GIT pull +} + +# check for USEGIT and subsequent variables +if [[ $USEGIT && -n $GITREMOTE ]]; then + # GIT is a go. + if ! is_git_repo $BASEDIR; then + # initializing git repository + cd $BASEDIR + $GIT init + echo "adding all files to git" + $GIT add . + $GIT commit -m "$(basename $0) - initial commit" + $GIT remote add origin $GITREMOTE + $GIT push -u origin master + fi +elif [[ $USEGIT && -z $GITREMOTE ]]; then + echo "GITREMOTE variable not set. reverting USEGIT to false" + USEGIT=false +fi + diff --git a/SOURCE/head.sh b/SOURCE/head.sh index 6278aa1..9617ad3 100644 --- a/SOURCE/head.sh +++ b/SOURCE/head.sh @@ -17,7 +17,7 @@ PID=$$ BASENAME=$( basename "$0" ) NOW=$(date +%s) -VERSION="0.3" +VERSION="0.4git" DBVERSION=${VERSION}_${NOW} set_defaults() { @@ -25,6 +25,8 @@ set_defaults() { JQ=${JQ:-/usr/bin/jq} EDITOR=${EDITOR:-/usr/bin/vim} TERMINAL=${TERMINAL:-/usr/bin/alacritty} +# Git binary only used if $USEGIT is true - See below +GIT=${GIT:-/usr/bin/git} # add options for your terminal. Remember to add the last option to execute # your editor program, otherwise the script will fail. # see example in the addnote function @@ -43,6 +45,13 @@ DB=${BASEDIR}/db.json # directory containing the actual notes NOTESDIR=${BASEDIR}/notes +### GIT SUPPORT + +# If you want to store your notes in a git repository set this to true +USEGIT=true +# Address of your remote repository +GITREMOTE=${GITREMOTE:-""} + } # end set_defaults, do not change this line. set_defaults diff --git a/SOURCE/main.sh b/SOURCE/main.sh index be70a06..07f96e8 100644 --- a/SOURCE/main.sh +++ b/SOURCE/main.sh @@ -1,5 +1,5 @@ # shellcheck disable=SC2006 -GOPT=$(getopt -o hvplr::a::e::d::s:: --long help,version,list,plain,userconf,restore::,backup::,add::,edit::,delete::,show:: -n 'bash-notes' -- "$@") +GOPT=$(getopt -o hvplr::a::e::d::s:: --long help,version,list,plain,userconf,sync,restore::,backup::,add::,edit::,delete::,show:: -n 'bash-notes' -- "$@") # shellcheck disable=SC2181 if [ $? != 0 ] ; then helptext >&2 ; exit 1 ; fi @@ -91,6 +91,10 @@ while true; do backup_restore $RDIR exit ;; + --sync ) + gitsync + exit + ;; --userconf ) export_config # shellcheck disable=SC2317 diff --git a/notes.sh b/notes.sh index 1a4b566..cbb34eb 100755 --- a/notes.sh +++ b/notes.sh @@ -17,7 +17,7 @@ PID=$$ BASENAME=$( basename "$0" ) NOW=$(date +%s) -VERSION="0.3" +VERSION="0.4git" DBVERSION=${VERSION}_${NOW} set_defaults() { @@ -25,6 +25,8 @@ set_defaults() { JQ=${JQ:-/usr/bin/jq} EDITOR=${EDITOR:-/usr/bin/vim} TERMINAL=${TERMINAL:-/usr/bin/alacritty} +# Git binary only used if $USEGIT is true - See below +GIT=${GIT:-/usr/bin/git} # add options for your terminal. Remember to add the last option to execute # your editor program, otherwise the script will fail. # see example in the addnote function @@ -43,6 +45,13 @@ DB=${BASEDIR}/db.json # directory containing the actual notes NOTESDIR=${BASEDIR}/notes +### GIT SUPPORT + +# If you want to store your notes in a git repository set this to true +USEGIT=true +# Address of your remote repository +GITREMOTE=${GITREMOTE:-""} + } # end set_defaults, do not change this line. set_defaults @@ -221,6 +230,44 @@ function random_title() { echo $OUTPUT } +# returns true if the argument provided directory is a git repository +is_git_repo() { + DIR=$1 + if [[ -d $DIR ]]; then + cd $DIR + if git rev-parse 2>/dev/null; then + true + else + false + fi + fi +} + +# sync local repository to remote +gitsync() { + echo "Syncing notes with git on remote \"$GITREMOTE\"" + cd $BASEDIR + $GIT pull +} + +# check for USEGIT and subsequent variables +if [[ $USEGIT && -n $GITREMOTE ]]; then + # GIT is a go. + if ! is_git_repo $BASEDIR; then + # initializing git repository + cd $BASEDIR + $GIT init + echo "adding all files to git" + $GIT add . + $GIT commit -m "$(basename $0) - initial commit" + $GIT remote add origin $GITREMOTE + $GIT push -u origin master + fi +elif [[ $USEGIT && -z $GITREMOTE ]]; then + echo "GITREMOTE variable not set. reverting USEGIT to false" + USEGIT=false +fi + function addnote() { # remove eventually existing temp DB file if [[ -f $TMPDB ]]; then @@ -444,7 +491,7 @@ function shownote() { fi } # shellcheck disable=SC2006 -GOPT=$(getopt -o hvplr::a::e::d::s:: --long help,version,list,plain,userconf,restore::,backup::,add::,edit::,delete::,show:: -n 'bash-notes' -- "$@") +GOPT=$(getopt -o hvplr::a::e::d::s:: --long help,version,list,plain,userconf,sync,restore::,backup::,add::,edit::,delete::,show:: -n 'bash-notes' -- "$@") # shellcheck disable=SC2181 if [ $? != 0 ] ; then helptext >&2 ; exit 1 ; fi @@ -536,6 +583,10 @@ while true; do backup_restore $RDIR exit ;; + --sync ) + gitsync + exit + ;; --userconf ) export_config # shellcheck disable=SC2317 -- 2.20.1