diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..d024f60 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Marcell Mars + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/giq/giq.go b/giq/giq.go index bf66074..5b39632 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 1338413..50d204c 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 9bfb29d..18f0f8e 100755 Binary files a/sphook and b/sphook differ diff --git a/vendor/modules.txt b/vendor/modules.txt index f94e970..4691df5 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