Update to use no dependencies

A
This commit is contained in:
2024-08-11 17:33:05 +02:00
parent 3f2f961791
commit 1a40d00279
3 changed files with 67 additions and 196 deletions

126
main.go
View File

@@ -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
}