[NEW] sysutils/gitwatch: Bash script to watch a file or folder and commit changes to a git repo
A bash script to watch a file or folder and commit changes to a git repo What to use it for? * config files: some programs auto-write their config files, without waiting for you to click an 'Apply' button; or even if there is such a button, most programs offer you no way of going back to an earlier version of your settings. If you commit your config file(s) to a git repo, you can track changes and go back to older versions. This script makes it convenient, to have all changes recorded automatically. * document files: if you use an editor that does not have built-in git support (or maybe if you don't like the git support it has), you can use gitwatch to automatically commit your files when you save them, or combine it with the editor's auto-save feature to fully automatically and regularly track your changes. WWW: https://github.com/gitwatch/gitwatch Sponsored by: Bounce Experts
This commit is contained in:
parent
fbefd3f149
commit
ed12d78caf
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=555439
@ -430,6 +430,7 @@
|
||||
SUBDIR += geteltorito
|
||||
SUBDIR += getssl
|
||||
SUBDIR += gigolo
|
||||
SUBDIR += gitwatch
|
||||
SUBDIR += gkfreq
|
||||
SUBDIR += gkleds2
|
||||
SUBDIR += gkrellflynn
|
||||
|
33
sysutils/gitwatch/Makefile
Normal file
33
sysutils/gitwatch/Makefile
Normal file
@ -0,0 +1,33 @@
|
||||
# Created by: Muhammad Moinur Rahman <bofh@FreeBSD.org>
|
||||
# $FreeBSD$
|
||||
|
||||
PORTNAME= gitwatch
|
||||
DISTVERSION= 0.1.a.20200814
|
||||
CATEGORIES= sysutils
|
||||
|
||||
MAINTAINER= bofh@FreeBSD.org
|
||||
COMMENT= Bash script to watch a file or folder and commit changes to a git repo
|
||||
|
||||
LICENSE= GPLv3
|
||||
LICENSE_FILE= ${WRKSRC}/LICENSE
|
||||
|
||||
RUN_DEPENDS= bash>0:shells/bash \
|
||||
git:devel/git@lite \
|
||||
inotifywait:sysutils/inotify-tools
|
||||
|
||||
USES= shebangfix
|
||||
USE_GITHUB= yes
|
||||
USE_RC_SUBR= ${PORTNAME}
|
||||
|
||||
GH_TAGNAME= e62df74
|
||||
|
||||
SHEBANG_FILES= ${WRKSRC}/${PORTNAME}.sh
|
||||
|
||||
NO_ARCH= yes
|
||||
NO_BUILD= yes
|
||||
PLIST_FILES= bin/${PORTNAME}
|
||||
|
||||
do-install:
|
||||
${INSTALL_SCRIPT} ${WRKSRC}/${PORTNAME}.sh ${STAGEDIR}${PREFIX}/bin/${PORTNAME}
|
||||
|
||||
.include <bsd.port.mk>
|
3
sysutils/gitwatch/distinfo
Normal file
3
sysutils/gitwatch/distinfo
Normal file
@ -0,0 +1,3 @@
|
||||
TIMESTAMP = 1605403644
|
||||
SHA256 (gitwatch-gitwatch-0.1.a.20200814-e62df74_GH0.tar.gz) = d66d9fa89619a693c3441dbf59ddd11fa4048f85f63194452a68024d75aa3b8a
|
||||
SIZE (gitwatch-gitwatch-0.1.a.20200814-e62df74_GH0.tar.gz) = 21889
|
43
sysutils/gitwatch/files/gitwatch.in
Normal file
43
sysutils/gitwatch/files/gitwatch.in
Normal file
@ -0,0 +1,43 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# $FreeBSD:$
|
||||
#
|
||||
# PROVIDE: gitwatch
|
||||
# REQUIRE: DAEMON
|
||||
# KEYWORD: shutdown
|
||||
#
|
||||
# gitwatch_enable (bool): Set it to "YES" to enable gitwatch
|
||||
# Default is "NO".
|
||||
#
|
||||
# gitwatch_targets (path): Set the path to the target directory
|
||||
# Default is %%PREFIX%%/etc. Multiple targets can be separated by spaces
|
||||
#
|
||||
|
||||
. /etc/rc.subr
|
||||
|
||||
name="gitwatch"
|
||||
rcvar="gitwatch_enable"
|
||||
|
||||
start_cmd="${name}_start"
|
||||
|
||||
load_rc_config $name
|
||||
|
||||
: ${gitwatch_enable:=NO}
|
||||
: ${gitwatch_targets:="%%PREFIX%%/etc"}
|
||||
: ${gitwatch_args:="-l 10"}
|
||||
|
||||
command="%%PREFIX%%/bin/${name}"
|
||||
command_interpreter="%%PREFIX%%/bin/bash"
|
||||
command_args="${gitwatch_args}"
|
||||
|
||||
PATH="${PATH}:%%PREFIX%%/bin"
|
||||
|
||||
gitwatch_start() {
|
||||
|
||||
# Start a gitwatch for each target
|
||||
for TARGET in ${gitwatch_targets}; do
|
||||
${command} ${command_args} "${TARGET}" >/dev/null &
|
||||
done
|
||||
}
|
||||
|
||||
run_rc_command "$1"
|
127
sysutils/gitwatch/files/patch-gitwatch.sh
Normal file
127
sysutils/gitwatch/files/patch-gitwatch.sh
Normal file
@ -0,0 +1,127 @@
|
||||
--- gitwatch.sh.orig 2020-11-15 05:05:21 UTC
|
||||
+++ gitwatch.sh
|
||||
@@ -43,6 +43,9 @@ COMMITMSG="Scripted auto-commit on change (%d) by gitw
|
||||
LISTCHANGES=-1
|
||||
LISTCHANGES_COLOR="--color=always"
|
||||
GIT_DIR=""
|
||||
+GIT="$(which git)"
|
||||
+INW="$(which inotifywait)";
|
||||
+EVENTS="${EVENTS:-close_write,move,move_self,delete,create,modify}"
|
||||
|
||||
# Print a message about how to use this script
|
||||
shelp () {
|
||||
@@ -97,12 +100,6 @@ shelp () {
|
||||
echo "It is therefore recommended to terminate the script before changing the repo's"
|
||||
echo "config and restarting it afterwards."
|
||||
echo ""
|
||||
- echo "By default, gitwatch tries to use the binaries \"git\" and \"inotifywait\","
|
||||
- echo "expecting to find them in the PATH (it uses 'which' to check this and will"
|
||||
- echo "abort with an error if they cannot be found). If you want to use binaries"
|
||||
- echo "that are named differently and/or located outside of your PATH, you can define"
|
||||
- echo "replacements in the environment variables GW_GIT_BIN and GW_INW_BIN for git"
|
||||
- echo "and inotifywait, respectively."
|
||||
}
|
||||
|
||||
# print all arguments to stderr
|
||||
@@ -118,11 +115,6 @@ cleanup () {
|
||||
exit 0
|
||||
}
|
||||
|
||||
-# Tests for the availability of a command
|
||||
-is_command () {
|
||||
- hash "$1" 2>/dev/null
|
||||
-}
|
||||
-
|
||||
###############################################################################
|
||||
|
||||
while getopts b:d:h:g:L:l:m:p:r:s:e: option # Process command line options
|
||||
@@ -149,65 +141,20 @@ if [ $# -ne 1 ]; then # If no command line arguments a
|
||||
exit # and exit
|
||||
fi
|
||||
|
||||
-# if custom bin names are given for git or inotifywait, use those; otherwise fall back to "git" and "inotifywait"
|
||||
-if [ -z "$GW_GIT_BIN" ]; then GIT="git"; else GIT="$GW_GIT_BIN"; fi
|
||||
-
|
||||
-if [ -z "$GW_INW_BIN" ]; then
|
||||
- # if Mac, use fswatch
|
||||
- if [ "$(uname)" != "Darwin" ]; then
|
||||
- INW="inotifywait";
|
||||
- EVENTS="${EVENTS:-close_write,move,move_self,delete,create,modify}"
|
||||
- else
|
||||
- INW="fswatch";
|
||||
- # default events specified via a mask, see
|
||||
- # https://emcrisostomo.github.io/fswatch/doc/1.14.0/fswatch.html/Invoking-fswatch.html#Numeric-Event-Flags
|
||||
- # default of 414 = MovedTo + MovedFrom + Renamed + Removed + Updated + Created
|
||||
- # = 256 + 128+ 16 + 8 + 4 + 2
|
||||
- EVENTS="${EVENTS:---event=414}"
|
||||
- fi;
|
||||
-else
|
||||
- INW="$GW_INW_BIN";
|
||||
-fi
|
||||
-
|
||||
-# Check availability of selected binaries and die if not met
|
||||
-for cmd in "$GIT" "$INW"; do
|
||||
- is_command "$cmd" || { stderr "Error: Required command '$cmd' not found." ; exit 1; }
|
||||
-done
|
||||
-unset cmd
|
||||
-
|
||||
###############################################################################
|
||||
|
||||
SLEEP_PID="" # pid of timeout subprocess
|
||||
|
||||
trap "cleanup" EXIT # make sure the timeout is killed when exiting script
|
||||
|
||||
-
|
||||
# Expand the path to the target to absolute path
|
||||
-if [ "$(uname)" != "Darwin" ]; then
|
||||
- IN=$(readlink -f "$1")
|
||||
-else
|
||||
- if is_command "greadlink"; then
|
||||
- IN=$(greadlink -f "$1")
|
||||
- else
|
||||
- IN=$(readlink -f "$1")
|
||||
- if [ $? -eq 1 ]; then
|
||||
- echo "Seems like your readlink doesn't support '-f'. Running without. Please 'brew install coreutils'."
|
||||
- IN=$(readlink "$1")
|
||||
- fi
|
||||
- fi;
|
||||
-fi;
|
||||
+IN=$(readlink -f "$1")
|
||||
|
||||
-
|
||||
if [ -d "$1" ]; then # if the target is a directory
|
||||
|
||||
TARGETDIR=$(sed -e "s/\/*$//" <<<"$IN") # dir to CD into before using git commands: trim trailing slash, if any
|
||||
# construct inotifywait-commandline
|
||||
- if [ "$(uname)" != "Darwin" ]; then
|
||||
- INW_ARGS=("-qmr" "-e" "$EVENTS" "--exclude" "'(\.git/|\.git$)'" "\"$TARGETDIR\"")
|
||||
- else
|
||||
- # still need to fix EVENTS since it wants them listed one-by-one
|
||||
- INW_ARGS=("--recursive" "$EVENTS" "--exclude" "'(\.git/|\.git$)'" "\"$TARGETDIR\"")
|
||||
- fi;
|
||||
+ INW_ARGS=("-qmr" "-e" "$EVENTS" "--exclude" "'(\.git/|\.git$)'" "\"$TARGETDIR\"")
|
||||
GIT_ADD_ARGS="--all ." # add "." (CWD) recursively to index
|
||||
GIT_COMMIT_ARGS="" # add -a switch to "commit" call just to be sure
|
||||
|
||||
@@ -215,11 +162,7 @@ elif [ -f "$1" ]; then # if the target is a single fil
|
||||
|
||||
TARGETDIR=$(dirname "$IN") # dir to CD into before using git commands: extract from file name
|
||||
# construct inotifywait-commandline
|
||||
- if [ "$(uname)" != "Darwin" ]; then
|
||||
- INW_ARGS=("-qm" "-e" "$EVENTS" "$IN")
|
||||
- else
|
||||
- INW_ARGS=("$EVENTS" "$IN")
|
||||
- fi
|
||||
+ INW_ARGS=("-qm" "-e" "$EVENTS" "$IN")
|
||||
|
||||
GIT_ADD_ARGS="$IN" # add only the selected file to index
|
||||
GIT_COMMIT_ARGS="" # no need to add anything more to "commit" call
|
||||
@@ -260,6 +203,8 @@ if [ -n "$REMOTE" ]; then # are we pushing to a remote
|
||||
PUSH_CMD="$GIT push $REMOTE $BRANCH"
|
||||
fi
|
||||
fi
|
||||
+elif [ -n $($GIT config --get remote.origin.url) ] ; then
|
||||
+ PUSH_CMD="$GIT push"
|
||||
else
|
||||
PUSH_CMD="" # if not remote is selected, make sure push command is empty
|
||||
fi
|
17
sysutils/gitwatch/pkg-descr
Normal file
17
sysutils/gitwatch/pkg-descr
Normal file
@ -0,0 +1,17 @@
|
||||
A bash script to watch a file or folder and commit changes to a git repo
|
||||
|
||||
What to use it for?
|
||||
|
||||
* config files: some programs auto-write their config files, without waiting
|
||||
for you to click an 'Apply' button; or even if there is such a button, most
|
||||
programs offer you no way of going back to an earlier version of your settings.
|
||||
If you commit your config file(s) to a git repo, you can track changes and go
|
||||
back to older versions. This script makes it convenient, to have all changes
|
||||
recorded automatically.
|
||||
* document files: if you use an editor that does not have built-in git support
|
||||
(or maybe if you don't like the git support it has), you can use gitwatch to
|
||||
automatically commit your files when you save them, or combine it with the
|
||||
editor's auto-save feature to fully automatically and regularly track your
|
||||
changes.
|
||||
|
||||
WWW: https://github.com/gitwatch/gitwatch
|
Loading…
Reference in New Issue
Block a user