Minimal working POC
This commit is contained in:
commit
5a4832582a
5 changed files with 116 additions and 0 deletions
25
README.md
Normal file
25
README.md
Normal file
|
@ -0,0 +1,25 @@
|
|||
# c.sh
|
||||
|
||||
## Installation
|
||||
|
||||
```
|
||||
cd /opt/tools/c/
|
||||
git clone https://git.okoyono.de/f/c.sh.git
|
||||
cd c.sh
|
||||
ln -s motd.sh /etc/profile.d/
|
||||
cp gitignore /.gitignore
|
||||
echo "source /opt/tools/c/zsh.config" >> /root/.zshrc
|
||||
|
||||
git init repo
|
||||
cd repo
|
||||
git config pager.diff false
|
||||
git config advice.addIgnoredFile false
|
||||
git config core.worktree /
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
```
|
||||
c help
|
||||
```
|
||||
|
66
c.sh
Normal file
66
c.sh
Normal file
|
@ -0,0 +1,66 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
[[ $# -eq 0 ]] && echo "no subcommand given" && exit 1
|
||||
|
||||
WORKDIR="$(dirname "$(realpath "$0")")"
|
||||
PWD=`pwd`
|
||||
|
||||
RESOURCE_TO_TRACK=""
|
||||
[[ $1 = "track" && $# -eq 2 ]] && RESOURCE_TO_TRACK="$(realpath "$2")"
|
||||
|
||||
cd $WORKDIR
|
||||
|
||||
case $1 in
|
||||
"commit")
|
||||
shift
|
||||
MESSAGE="$*"
|
||||
[[ "$MESSAGE" = "" ]] && MESSAGE="config.sh commit from $HOSTNAME"
|
||||
git add --all
|
||||
git commit -m "$MESSAGE"
|
||||
;;
|
||||
|
||||
"track")
|
||||
if [[ $# -ne 2 ]]; then
|
||||
echo "no file or folder given"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if there is a .git folder. If so, we need to temporary
|
||||
# rename it, so we can track the file/folder.
|
||||
GIT_DIR=
|
||||
TRAVERSAL_PATH="$RESOURCE_TO_TRACK"
|
||||
while [[ "$TRAVERSAL_PATH" != "/" ]]; do
|
||||
if [[ -d "$TRAVERSAL_PATH/.git" ]]; then
|
||||
GIT_DIR="$TRAVERSAL_PATH/.git"
|
||||
break
|
||||
fi
|
||||
TRAVERSAL_PATH="$(dirname $TRAVERSAL_PATH)"
|
||||
done
|
||||
|
||||
[[ "$GIT_DIR" != "" ]] && mv "$GIT_DIR" "$GIT_DIR.keep"
|
||||
git add -v -f "$RESOURCE_TO_TRACK"
|
||||
[[ "$GIT_DIR" != "" ]] && mv "$GIT_DIR.keep" "$GIT_DIR"
|
||||
;;
|
||||
|
||||
"diff")
|
||||
git status -s
|
||||
git diff -p
|
||||
;;
|
||||
|
||||
"revert")
|
||||
echo "Not implemented"
|
||||
;;
|
||||
|
||||
"log")
|
||||
echo "Last changes:"
|
||||
git log --pretty=format:' * %cr: %s' | head -3
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "pull (pull the changes from git)"
|
||||
echo "push (push the changes to git)"
|
||||
echo "track (add a file or folder to git)"
|
||||
echo "diff (show unpushed changes)"
|
||||
;;
|
||||
esac
|
||||
|
1
gitignore
Normal file
1
gitignore
Normal file
|
@ -0,0 +1 @@
|
|||
*
|
4
motd.sh
Normal file
4
motd.sh
Normal file
|
@ -0,0 +1,4 @@
|
|||
if [[ "$USER" = "root" ]]; then
|
||||
/opt/tools/server-config/c.sh log
|
||||
fi
|
||||
|
20
zsh.config
Normal file
20
zsh.config
Normal file
|
@ -0,0 +1,20 @@
|
|||
CSTATUS=""
|
||||
update_cstatus() {
|
||||
git_stat=`cd /opt/tools/server-config/; git diff --shortstat | tr -c -d '[0-9,]'`
|
||||
if [[ "$git_stat" = "" ]]; then
|
||||
CSTATUS=""
|
||||
else
|
||||
stats=(${(@s:,:)git_stat})
|
||||
CSTATUS="[%F{green}+${stats[2]}%f/%F{red}-${stats[3]}%f]"
|
||||
fi
|
||||
}
|
||||
|
||||
autoload -U add-zsh-hook
|
||||
add-zsh-hook preexec update_cstatus
|
||||
add-zsh-hook precmd update_cstatus
|
||||
|
||||
setopt PROMPT_SUBST
|
||||
PS1='%T $CSTATUS %(?.%F{green}√.%F{red}?%?)%f %F{#666}%~%f %# '
|
||||
|
||||
alias c="/opt/tools/server-config/c.sh"
|
||||
|
Loading…
Reference in a new issue