1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
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
|