mirror of https://github.com/curusarn/resh
parent
c7426e948e
commit
f1cb7bfc75
@ -1,10 +1,30 @@ |
|||||||
|
SHELL=/bin/bash
|
||||||
|
|
||||||
build: submodules/bash-preexec/bash-preexec.sh |
build: submodules resh-collect |
||||||
@echo "build"
|
|
||||||
|
|
||||||
install: build |
install: build $(HOME)/.resh $(HOME)/.resh/bin |
||||||
@echo "install"
|
cp submodules/bash-preexec/bash-preexec.sh ~/.bash-preexec.sh
|
||||||
|
cp src/bashrc.sh ~/.resh/bashrc
|
||||||
|
cp resh-collect ~/.resh/bin/
|
||||||
|
grep '[[ -f ~/.resh/bashrc ]] && source ~/.resh/bashrc' ~/.bashrc ||\
|
||||||
|
echo '[[ -f ~/.resh/bashrc ]] && source ~/.resh/bashrc' >> ~/.bashrc
|
||||||
|
grep '[[ -f ~/.bash-preexec.sh ]] && source ~/.bash-preexec.sh' ~/.bashrc ||\
|
||||||
|
echo '[[ -f ~/.bash-preexec.sh ]] && source ~/.bash-preexec.sh' >> ~/.bashrc
|
||||||
|
|
||||||
|
resh-collect: src/resh-collect.go |
||||||
|
go build -o resh-collect src/resh-collect.go
|
||||||
|
|
||||||
|
$(HOME)/.resh: |
||||||
|
mkdir $(HOME)/.resh
|
||||||
|
|
||||||
|
$(HOME)/.resh/bin: |
||||||
|
mkdir $(HOME)/.resh/bin
|
||||||
|
|
||||||
|
.PHONY: submodules build install |
||||||
|
|
||||||
|
submodules: submodules/bash-preexec/bash-preexec.sh |
||||||
|
# this is always run and updates submodules
|
||||||
|
git submodule update --recursive
|
||||||
|
|
||||||
submodules/%: |
submodules/%: |
||||||
-git submodule init
|
git submodule init
|
||||||
git submodule update
|
|
||||||
|
|||||||
@ -0,0 +1,13 @@ |
|||||||
|
|
||||||
|
PATH=$PATH:~/.resh/bin |
||||||
|
|
||||||
|
preexec() { |
||||||
|
__RESH_PWD="$PWD" |
||||||
|
__RESH_CMDLINE="$1" |
||||||
|
} |
||||||
|
|
||||||
|
precmd() { |
||||||
|
__RESH_EXIT_CODE=$? |
||||||
|
resh-collect $__RESH_EXIT_CODE "$PWD" "$__RESH_CMDLINE" |
||||||
|
} |
||||||
|
|
||||||
@ -0,0 +1,67 @@ |
|||||||
|
package main |
||||||
|
|
||||||
|
import ( |
||||||
|
"fmt" |
||||||
|
"os" |
||||||
|
"os/exec" |
||||||
|
"log" |
||||||
|
"strconv" |
||||||
|
"strings" |
||||||
|
) |
||||||
|
|
||||||
|
type record struct { |
||||||
|
CmdLine string |
||||||
|
Pwd string |
||||||
|
GitWorkTree string |
||||||
|
Shell string |
||||||
|
ExitCode int |
||||||
|
//Logs string[]
|
||||||
|
} |
||||||
|
|
||||||
|
func main() { |
||||||
|
exitCode, err := strconv.Atoi(os.Args[1]) |
||||||
|
if err != nil { |
||||||
|
// log this
|
||||||
|
log.Fatal("First arg is not a number! (expecting $?)", err) |
||||||
|
} |
||||||
|
pwd := os.Args[2] |
||||||
|
cmdLine := os.Args[3] |
||||||
|
rec := record{ |
||||||
|
CmdLine: cmdLine, |
||||||
|
Pwd: pwd, |
||||||
|
GitWorkTree: getGitDir(), |
||||||
|
Shell: os.Getenv("SHELL"), |
||||||
|
ExitCode: exitCode, |
||||||
|
} |
||||||
|
rec.send() |
||||||
|
} |
||||||
|
|
||||||
|
func getGitDir() string { |
||||||
|
// assume we are in pwd
|
||||||
|
gitWorkTree := os.Getenv("GIT_WORK_TREE") |
||||||
|
|
||||||
|
if gitWorkTree != "" { |
||||||
|
return gitWorkTree |
||||||
|
} |
||||||
|
// we should look up the git directory ourselves
|
||||||
|
// OR leave it to resh daemon to not slow down user
|
||||||
|
out, err := exec.Command("git", "rev-parse", "--show-toplevel").Output() |
||||||
|
if err != nil { |
||||||
|
if exitError, ok := err.(*exec.ExitError); ok { |
||||||
|
if exitError.ExitCode() == 128 { |
||||||
|
return "" |
||||||
|
} |
||||||
|
log.Fatal("git cmd failed") |
||||||
|
} else { |
||||||
|
log.Fatal("git cmd failed w/o exit code") |
||||||
|
} |
||||||
|
} |
||||||
|
return strings.TrimSuffix(string(out), "\n") |
||||||
|
} |
||||||
|
|
||||||
|
func (r record) send() { |
||||||
|
fmt.Println("cmd:", r.CmdLine) |
||||||
|
fmt.Println("pwd:", r.Pwd) |
||||||
|
fmt.Println("git:", r.GitWorkTree) |
||||||
|
fmt.Println("exit_code:", r.ExitCode) |
||||||
|
} |
||||||
Loading…
Reference in new issue