Skip to content

Commit 04116d1

Browse files
author
yanzihuan
committed
feat: add cmd.
1 parent 00d3dee commit 04116d1

File tree

12 files changed

+124
-23
lines changed

12 files changed

+124
-23
lines changed

diff.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
// package diff diff.go.
2+
package diff
3+
4+
import (
5+
"log"
6+
7+
"github.com/lower-coder/go-git-diff/internal"
8+
"github.com/lower-coder/go-git-diff/parser"
9+
)
10+
11+
// GitDiffStaged parse the output of `git diff --staged`.
12+
// @return *parser.Diff
13+
// @return error
14+
func GitDiffStaged() (*parser.Diff, error) {
15+
cmd := internal.NewCommand("git", "diff", "--staged")
16+
output, err := cmd.Run()
17+
if err != nil {
18+
log.Printf("get diff staged failed, err = %+v", err)
19+
return nil, err
20+
}
21+
diff := parser.NewDiff()
22+
diff.Parse(output)
23+
return diff, nil
24+
}

diff/constant.go

Lines changed: 0 additions & 6 deletions
This file was deleted.

internal/command.go

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
// package internal command.go
2+
package internal
3+
4+
import (
5+
"bytes"
6+
"log"
7+
"os"
8+
"os/exec"
9+
"strings"
10+
)
11+
12+
// Command struct.
13+
type Command struct {
14+
Name string
15+
Args []string
16+
env []string
17+
dir string
18+
}
19+
20+
// NewCommand new a Command instance.
21+
// @param name
22+
// @param args
23+
// @return *Command
24+
func NewCommand(name string, args ...string) *Command {
25+
return &Command{
26+
Name: name,
27+
Args: args,
28+
env: os.Environ(),
29+
dir: ".",
30+
}
31+
}
32+
33+
// SetDir set command workspace.
34+
// @receiver c
35+
// @param dir
36+
// @return *cmd
37+
func (c *Command) SetDir(dir string) *Command {
38+
c.dir = dir
39+
40+
return c
41+
}
42+
43+
// AddEnv add an environment config.
44+
// @receiver c
45+
// @param env
46+
// @return *Command
47+
func (c *Command) AddEnv(env []string) *Command {
48+
c.env = append(c.env, env...)
49+
50+
return c
51+
}
52+
53+
// Run command.
54+
// @receiver c
55+
// @return string
56+
// @return error
57+
func (c *Command) Run() (string, error) {
58+
stdout := new(bytes.Buffer)
59+
stderr := new(bytes.Buffer)
60+
61+
e := exec.Command(c.Name, c.Args...)
62+
log.Printf("exec command: %+v", e)
63+
64+
e.Env = c.env
65+
e.Dir = c.dir
66+
e.Stdout = stdout
67+
e.Stderr = stderr
68+
69+
err := e.Run()
70+
if err != nil {
71+
log.Printf("exec command failed: err = %+v, stderr = %+v", err, stderr.String())
72+
return "", err
73+
}
74+
75+
return strings.Trim(stdout.String(), "\n"), nil
76+
}

internal/regexp.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
1-
// Package internal 正则表达式
1+
// Package internal regexp.go
22
package internal
33

44
import "regexp"
55

6+
// regexpT is a regexp template struct.
67
type regexpT struct {
78
ChunkRegexp *regexp.Regexp
89
}
910

10-
// RegexpT 正则表达式模版
11+
// RegexpT is a regexp template struct.
1112
var RegexpT *regexpT
1213

13-
// InitRegexpT 初始化正则表达式模板
14+
// InitRegexpT init regexp template.
1415
func InitRegexpT() {
1516
RegexpT = &regexpT{}
1617

diff/chunk.go renamed to parser/chunk.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
// Package diff diff块
2-
package diff
1+
// Package parser diff块
2+
package parser
33

44
import (
55
"strings"

parser/constant.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
// Package parser 常量
2+
package parser
3+
4+
const (
5+
Space = " " // 空格
6+
)

diff/diff.go renamed to parser/diff.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
// Package diff 处理go语言git diff解析 `git diff source target`
2-
package diff
1+
// Package parser 处理go语言git diff解析 `git diff source target`
2+
package parser
33

44
import (
55
"strings"

diff/diff_test.go renamed to parser/diff_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
// Package diff 模块说明
2-
package diff
1+
// Package parser 模块说明
2+
package parser
33

44
import (
55
"encoding/json"

diff/input.go renamed to parser/input.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
// Package diff 输入数据源
2-
package diff
1+
// Package parser 输入数据源
2+
package parser
33

44
import "strings"
55

diff/legend.go renamed to parser/legend.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
// Package diff 图例
2-
package diff
1+
// Package parser 图例
2+
package parser
33

44
import "strings"
55

diff/line.go renamed to parser/line.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
// Package diff diff行
2-
package diff
1+
// Package parser diff行
2+
package parser
33

44
const (
55
InsertPrefix = "+" // 新增行前缀

diff/meta.go renamed to parser/meta.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
// Package diff 元数据
2-
package diff
1+
// Package parser 元数据
2+
package parser
33

44
import "strings"
55

0 commit comments

Comments
 (0)