Update to use no dependencies
A
This commit is contained in:
126
main.go
126
main.go
@@ -3,15 +3,13 @@ package main
|
||||
import (
|
||||
"log"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path"
|
||||
"path/filepath"
|
||||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/go-git/go-git/v5"
|
||||
"github.com/go-git/go-git/v5/plumbing/object"
|
||||
)
|
||||
|
||||
var timeUnits = map[string]int64{
|
||||
@@ -65,10 +63,12 @@ func getEnv(key, def string) string {
|
||||
return def
|
||||
}
|
||||
|
||||
var ROOT string
|
||||
|
||||
func main() {
|
||||
log.SetFlags(log.Lmicroseconds)
|
||||
|
||||
var ROOT = filepath.ToSlash(strings.TrimSpace(getEnv("ROOT", "/tmp")))
|
||||
ROOT = filepath.ToSlash(strings.TrimSpace(getEnv("ROOT", "/tmp")))
|
||||
ROOT = path.Clean(ROOT)
|
||||
var SCAN_INTERVAL = time.Duration(parseDuration(getEnv("SCAN_INTERVAL", "1m")) * 1e6)
|
||||
|
||||
@@ -83,94 +83,102 @@ func main() {
|
||||
// Making empty commits
|
||||
// And other stupid shit
|
||||
// It does run on unix though
|
||||
doRun(ROOT)
|
||||
for {
|
||||
log.Printf("Running at %s", time.Now().Format(time.RFC3339))
|
||||
doRun()
|
||||
time.Sleep(SCAN_INTERVAL)
|
||||
doRun(ROOT)
|
||||
}
|
||||
}
|
||||
|
||||
func doRun(root string) {
|
||||
log.Printf("Opening repository at %s...", root)
|
||||
worktree, err := OpenRepositoryAndWorktree(root)
|
||||
func doRun() {
|
||||
status, err := doStatus()
|
||||
if err != nil {
|
||||
log.Printf("error opening repository at %s: %v", root, err)
|
||||
log.Println("Error executing doStatus:", err)
|
||||
return
|
||||
}
|
||||
log.Printf("Checking for changes in %s...", root)
|
||||
files, err := GetNumChangedFiles(worktree)
|
||||
if err != nil {
|
||||
log.Printf("error checking for changes in %s: %v", root, err)
|
||||
if status == "" {
|
||||
log.Printf("Nothing to commit")
|
||||
return
|
||||
}
|
||||
if files == 0 {
|
||||
log.Printf("No changes in %s", root)
|
||||
log.Println("Changes detected")
|
||||
|
||||
res, err := doAddAll()
|
||||
if err != nil {
|
||||
log.Println("Error executing doAddAll:", err)
|
||||
return
|
||||
}
|
||||
log.Printf("Staging %d files in %s...", files, root)
|
||||
err = AddAll(worktree)
|
||||
log.Println("Changes added to index:", res)
|
||||
|
||||
_, err = setIdentity()
|
||||
if err != nil {
|
||||
log.Printf("error staging files in %s: %v", root, err)
|
||||
log.Println("Error setting identity:", err)
|
||||
}
|
||||
|
||||
res, err = doCommit()
|
||||
if err != nil {
|
||||
log.Println("Error executing doCommitAll:", err)
|
||||
return
|
||||
}
|
||||
log.Printf("Committing changes in %s...", root)
|
||||
err = CommitUpdate(worktree)
|
||||
if err != nil {
|
||||
log.Printf("error committing changes in %s: %v", root, err)
|
||||
return
|
||||
}
|
||||
log.Printf("Done committing updates in %s", root)
|
||||
log.Println("Changes committed:", res)
|
||||
}
|
||||
|
||||
func OpenRepositoryAndWorktree(root string) (*git.Worktree, error) {
|
||||
repository, err := git.PlainOpen(root)
|
||||
func doStatus() (string, error) {
|
||||
gitStatus := exec.Command("git", "status", "-s")
|
||||
gitStatus.Dir = ROOT
|
||||
out, err := gitStatus.CombinedOutput()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return string(out), err
|
||||
}
|
||||
|
||||
worktree, err := repository.Worktree()
|
||||
return string(out), nil
|
||||
}
|
||||
func doAddAll() (string, error) {
|
||||
gitAdd := exec.Command("git", "add", ".")
|
||||
gitAdd.Dir = ROOT
|
||||
out, err := gitAdd.CombinedOutput()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return string(out), err
|
||||
}
|
||||
return worktree, nil
|
||||
return string(out), nil
|
||||
}
|
||||
|
||||
func HasChanges(worktree *git.Worktree) (bool, error) {
|
||||
status, err := worktree.Status()
|
||||
func doCommit() (string, error) {
|
||||
gitCommit := exec.Command("git", "commit", "-am", "Update")
|
||||
gitCommit.Dir = ROOT
|
||||
out, err := gitCommit.CombinedOutput()
|
||||
if err != nil {
|
||||
return false, err
|
||||
return string(out), err
|
||||
}
|
||||
return !status.IsClean(), nil
|
||||
return string(out), nil
|
||||
}
|
||||
|
||||
func GetNumChangedFiles(worktree *git.Worktree) (int, error) {
|
||||
status, err := worktree.Status()
|
||||
func setIdentity() (string, error) {
|
||||
res, err := setUsername()
|
||||
if err != nil {
|
||||
return 0, err
|
||||
log.Println("Error executing setUsername:", err)
|
||||
return string(res), err
|
||||
}
|
||||
return len(status), nil
|
||||
}
|
||||
|
||||
func AddAll(worktree *git.Worktree) error {
|
||||
err := worktree.AddGlob("*")
|
||||
res, err = setEmail()
|
||||
if err != nil {
|
||||
return err
|
||||
log.Println("Error executing setEmail:", err)
|
||||
return string(res), err
|
||||
}
|
||||
return nil
|
||||
return "", nil
|
||||
}
|
||||
|
||||
func CommitUpdate(worktree *git.Worktree) error {
|
||||
_, err := worktree.Commit("Update", &git.CommitOptions{
|
||||
AllowEmptyCommits: false,
|
||||
Author: &object.Signature{
|
||||
Name: "system",
|
||||
Email: "system@localhost",
|
||||
When: time.Now(),
|
||||
},
|
||||
})
|
||||
func setUsername() (string, error) {
|
||||
gitConfig := exec.Command("git", "config", "user.name", "system")
|
||||
gitConfig.Dir = ROOT
|
||||
out, err := gitConfig.CombinedOutput()
|
||||
if err != nil {
|
||||
return err
|
||||
return string(out), err
|
||||
}
|
||||
return nil
|
||||
return string(out), nil
|
||||
}
|
||||
func setEmail() (string, error) {
|
||||
gitConfig := exec.Command("git", "config", "user.email", "system@localhost")
|
||||
gitConfig.Dir = ROOT
|
||||
out, err := gitConfig.CombinedOutput()
|
||||
if err != nil {
|
||||
return string(out), err
|
||||
}
|
||||
return string(out), nil
|
||||
}
|
||||
|
Reference in New Issue
Block a user