-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtodo.sh
executable file
·74 lines (52 loc) · 1.78 KB
/
todo.sh
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
#!/bin/bash
# Instructions:
# - Files are named YY-MM-DD-todo.md
# - First line is "# MMM DD TODO" (e.g. "# Feb 03 TODO")
# - Sections are marked with ## (e.g. "## Work")
# - Tasks are marked with [ ] or [x] (e.g. "- [ ] task" or "- [x] completed task")
# - Subtasks are indented with 2 spaces (e.g. " - [ ] subtask")
TODO_DIR="."
DATE=$(date "+%b %d")
filename="$TODO_DIR/$(date "+%y-%m-%d")-todo.md"
yesterday_filename="$TODO_DIR/$(date -v -1d "+%y-%m-%d")-todo.md"
generate_commit_message() {
local diff=$(git diff --cached)
local completed=$(echo "$diff" | grep '^\+.*\[x\]' | sed 's/^[+\-]*//' | tr -d '[]x' | tr '\n' ',' | sed 's/,$//')
local added=$(echo "$diff" | grep '^\+.*\[ \]' | sed 's/^[+\-]*//' | tr -d '[]' | tr '\n' ',' | sed 's/,$//')
local message="$DATE:"
if [ ! -z "$completed" ]; then
message="$message Completed: $completed."
fi
if [ ! -z "$added" ]; then
message="$message Added: $added."
fi
if [ "$message" == "$DATE:" ]; then
message="$DATE: Updated todo lists"
fi
echo "$message"
}
main() {
if ! git rev-parse --is-inside-work-tree > /dev/null 2>&1; then
echo "Error: Not a git repository"
exit 1
fi
git pull
if [ ! -f "$filename" ]; then
cp "$yesterday_filename" "$filename"
sed -i '' "1s/.*$/# $DATE TODO/" "$filename"
git add "$filename"
git commit -m "$DATE: Created todo file"
git push
exit 0
fi
git add "$TODO_DIR"/*.md
if ! git diff --cached --quiet; then
COMMIT_MSG=$(generate_commit_message)
git commit -m "$COMMIT_MSG"
git push
echo "Changes committed and pushed: $COMMIT_MSG"
else
echo "No changes to commit"
fi
}
main