diff options
| author | Bernhard Guillon <Bernhard.Guillon@begu.org> | 2025-09-16 20:52:33 +0200 |
|---|---|---|
| committer | Bernhard Guillon <Bernhard.Guillon@begu.org> | 2025-09-16 20:52:33 +0200 |
| commit | 2bcd454a1c44dd1b896098584bfab615997e31e1 (patch) | |
| tree | 9be130f587fcfc31f875f46e9d5aa794a37a864e /future-me.sh | |
| download | future-me-2bcd454a1c44dd1b896098584bfab615997e31e1.tar.gz future-me-2bcd454a1c44dd1b896098584bfab615997e31e1.zip | |
future-me.sh: initial import
Diffstat (limited to 'future-me.sh')
| -rwxr-xr-x | future-me.sh | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/future-me.sh b/future-me.sh new file mode 100755 index 0000000..8da9406 --- /dev/null +++ b/future-me.sh @@ -0,0 +1,65 @@ +#!/bin/bash +set -x + +# First of all as we are using git update-index and don't want to mess arround with saving the current state +# We check if there is any staged files +check-git-status() { + git status --porcelain | grep -e ^A -e ^M && echo "You first need to clean you git staging status to use mr-todo" && exit 1 +} + +create-new-bug() { + readonly bug="$1" + last_ref=$(git show-ref refs/notes/devtools/mr-todo | cut -d ' ' -f 1) + echo $last_ref + if [ -n "$last_ref" ] + then + git read-tree $last_ref + else + git read-tree --empty + fi + + object_id=$(echo "$1" | git hash-object -w --stdin) + echo $object_id + file_path=${object_id:0:2}/${object_id:2} + git update-index --add --cacheinfo 100644 $object_id $file_path + tree_id=$(git write-tree) + files_to_unstage=$(git update-index --refresh | cut -d ' ' -f 1 | cut -d ':' -f 1) + git update-index --remove $files_to_unstage + if [ -n "$last_ref" ] + then + add_parent="$last_ref" + commit_id=$(echo 'mr-todo: created a new bug for you' | git commit-tree $tree_id -p $add_parent) + else + commit_id=$(echo 'mr-todo: created a new bug for you' | git commit-tree $tree_id) + fi + git update-ref refs/notes/devtools/mr-todo $commit_id +} + +show-bugs() { + #git ls-tree --full-tree -r refs/notes/devtools/mr-todo + for i in $(git ls-tree --full-tree -r refs/notes/devtools/mr-todo | cut -d ' ' -f 3 | cut -f 1 | tr '\n' ' '); do git cat-file -p $i ; done +} + +main() { + readonly command="$1" + readonly payload="${*:2}" + case $command in + new) + echo create new bug "$payload" #"${*:2}" + check-git-status + last_tree="$(git --no-pager log -1 --format="%H" | tr --delete '\n')" + echo $last_tree + create-new-bug "$payload" + git read-tree "$last_tree" + ;; + show) + echo show all bugs + show-bugs + ;; + *) + echo unknown command "$@" + ;; + esac +} + +main "$@" |
