diff --git a/giq/giq.go b/giq/giq.go index bf66074e..5b396325 100644 --- a/giq/giq.go +++ b/giq/giq.go @@ -3,8 +3,9 @@ package giq import ( "fmt" "log" - "os" + // "os" "path/filepath" + "strings" ) type Giqi interface { @@ -36,54 +37,50 @@ func check(e error) { } } -func isGitDir(path string) (bool, error) { - markers := []string{"HEAD", "objects", "refs"} - - for _, marker := range markers { - _, err := os.Stat(filepath.Join(path, marker)) - if err == nil { - continue - } - if !os.IsNotExist(err) { - return false, err - } else { - return false, nil - } +func ifE(e string) string { + switch e { + case + "HEAD", + "objects", + "refs": + return "+" } - - return true, nil + return "" } -func detectGitPath(path string) (string, bool, error) { - path, err := filepath.Abs(path) +// detectGitPath checks if there is either .git or +// the gitea's bare repoName.git/ and checks if those +// have HEAD, objects & refs. if it does it decides that +// /.git/ is not bare and /repoName.git/ is. + +func detectGitPath(p string) (string, bool, error) { + path, err := filepath.Abs(p) if err != nil { return "", false, err } + gitDir := strings.Split(path, ".git/") + matches, _ := filepath.Glob(gitDir[0] + ".git/*") - for { - fi, err := os.Stat(filepath.Join(path, ".git")) - if err == nil { - if !fi.IsDir() { - return "", false, fmt.Errorf(".git exist but is not a directory") - } - return path, false, nil - } - if !os.IsNotExist(err) { - return "", false, err - } + threeE := "" + for _, match := range matches { + threeE += ifE(strings.ReplaceAll(match, gitDir[0]+".git/", "")) + } - ok, err := isGitDir(path) - if err != nil { - return "", false, err - } - if ok { - return path, true, nil - } + isGit := false + if len(threeE) == 3 { + isGit = true + } - if parent := filepath.Dir(path); parent == path { - return "", false, fmt.Errorf(".git not found") + if isGit { + repoPath := gitDir[0] + isBare := true + if (len(strings.Split(path, "/.git/"))) > 1 { + isBare = false } else { - path = parent + repoPath = filepath.Join(gitDir[0] + ".git") } + return repoPath, isBare, nil + } else { + return path, false, fmt.Errorf("It seems Git hook was run from non-git directory!") } } diff --git a/main.go b/main.go index 13384130..50d204c8 100644 --- a/main.go +++ b/main.go @@ -15,7 +15,7 @@ import ( ) var ( - version = "21.04.05" + version = "21.06.01" logLines = "" ) @@ -64,8 +64,8 @@ func gitExePath(hook *Hook) string { func main() { startTime := time.Now() - logLines := fmt.Sprintf("~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~\nSANDPOINTS GITHOOK (%s)\n\n", version) - + logLines := fmt.Sprintf("\n~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~\nSANDPOINTS GITHOOK (%s)\n\n", version) + fmt.Println(logLines) // init global struct/variables var hook *Hook var hugo *Hugo @@ -130,9 +130,10 @@ func main() { logLines = logLines + fmt.Sprintf("\n~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~\nTotal githook time: %d ms\n~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~\n", durationMillseconds) logLines = logLines + startTime.Format(time.RFC822) + "\n~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~\n" - // logLines = logLines + "\n####################################\n" - // logLines = logLines + fmt.Sprintf("%#v", hugo) - // logLines = logLines + fmt.Sprintf("%#v", hook) + logLines = logLines + "\n####################################\n" + // logLines = logLines + fmt.Sprintf("%#v\n", hugo) + // logLines = logLines + fmt.Sprintf("%#v\n", hook) + // logLines = logLines + fmt.Sprintf("%#v", git) writeLastCommitLog(logLines, git.IsBare, hugo, hook) fmt.Println(logLines) diff --git a/sphook b/sphook index 9bfb29df..18f0f8ee 100755 Binary files a/sphook and b/sphook differ diff --git a/vendor/modules.txt b/vendor/modules.txt index f94e970c..4691df5e 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -459,8 +459,6 @@ github.com/jstemmer/go-junit-report/parser github.com/kevinburke/ssh_config # github.com/kyokomi/emoji/v2 v2.2.8 github.com/kyokomi/emoji/v2 -# github.com/magefile/mage v1.11.0 -## explicit # github.com/magiconair/properties v1.8.5 ## explicit github.com/magiconair/properties