Skip to content

Commit e007af6

Browse files
feat: init creates hooks dir in root git dir
This also makes `commitlint init` only possible from git repository directory
1 parent cd42e21 commit e007af6

File tree

2 files changed

+55
-7
lines changed

2 files changed

+55
-7
lines changed

cmd/callback.go

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package cmd
33
import (
44
"fmt"
55
"os"
6-
"path/filepath"
76

87
"github.com/urfave/cli/v2"
98

@@ -20,14 +19,13 @@ const (
2019
)
2120

2221
func initCallback(ctx *cli.Context) (retErr error) {
23-
// get user home dir
24-
homeDir, err := os.UserHomeDir()
22+
isGlobal := ctx.Bool("global")
23+
24+
hookDir, err := getHookDir(isGlobal)
2525
if err != nil {
2626
return err
2727
}
2828

29-
// create hooks dir
30-
hookDir := filepath.Join(homeDir, filepath.Clean(HookDir))
3129
err = os.MkdirAll(hookDir, os.ModePerm)
3230
if err != nil {
3331
return err
@@ -39,8 +37,13 @@ func initCallback(ctx *cli.Context) (retErr error) {
3937
return err
4038
}
4139

42-
isGlobal := ctx.Bool("global")
43-
return setGitConf(hookDir, isGlobal)
40+
err = setGitConf(hookDir, isGlobal)
41+
if err != nil {
42+
return err
43+
}
44+
45+
fmt.Println("commitlint init successfully")
46+
return nil
4447
}
4548

4649
func lintCallback(ctx *cli.Context) error {

cmd/util.go

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package cmd
22

33
import (
4+
"bytes"
45
"io"
56
"os"
67
"os/exec"
8+
"path/filepath"
79
"strings"
810

911
"github.com/conventionalcommit/commitlint/config"
@@ -60,6 +62,7 @@ func setGitConf(hookDir string, isGlobal bool) error {
6062
args = append(args, "core.hooksPath", hookDir)
6163

6264
cmd := exec.Command("git", args...)
65+
cmd.Stderr = os.Stderr
6366
return cmd.Run()
6467
}
6568

@@ -105,3 +108,45 @@ func readStdInPipe() (string, error) {
105108
s := string(readBytes)
106109
return strings.TrimSpace(s), nil
107110
}
111+
112+
func getHookDir(isGlobal bool) (string, error) {
113+
baseDir := filepath.Clean(HookDir)
114+
115+
if isGlobal {
116+
// get user home dir
117+
homeDir, err := os.UserHomeDir()
118+
if err != nil {
119+
return "", err
120+
}
121+
122+
// create hooks dir
123+
hookDir := filepath.Join(homeDir, baseDir)
124+
return hookDir, nil
125+
}
126+
127+
gitDir, err := getRepoRootDir()
128+
if err != nil {
129+
return "", err
130+
}
131+
return filepath.Join(gitDir, baseDir), nil
132+
}
133+
134+
func getRepoRootDir() (string, error) {
135+
byteOut := &bytes.Buffer{}
136+
137+
cmd := exec.Command("git", "rev-parse", "--git-dir")
138+
cmd.Stdout = byteOut
139+
cmd.Stderr = os.Stderr
140+
141+
err := cmd.Run()
142+
if err != nil {
143+
return "", err
144+
}
145+
146+
gitDir := filepath.Clean(byteOut.String())
147+
148+
// remove /.git at last
149+
gitDir = filepath.Dir(gitDir)
150+
151+
return gitDir, nil
152+
}

0 commit comments

Comments
 (0)