.
This commit is contained in:
@@ -174,6 +174,17 @@ func (f writeFunc) Write(data []byte) (int, error) {
|
||||
return f(data)
|
||||
}
|
||||
|
||||
func (h writeFunc) UnmarshalText(text []byte) error {
|
||||
_, err := h.Write(text)
|
||||
return err
|
||||
}
|
||||
|
||||
func (h writeFunc) Close() error {
|
||||
_, err := h.Write(nil)
|
||||
return err
|
||||
}
|
||||
|
||||
|
||||
func (e *RequestHandler) GitExec(cwd string, params ...string) ExecStream {
|
||||
if e.Error != nil {
|
||||
return e
|
||||
@@ -436,6 +447,61 @@ func parseGitTree(data <-chan byte) (tree, error) {
|
||||
return t, nil
|
||||
}
|
||||
|
||||
func (e *RequestHandler) GitSubmoduleList(cwd, commitId string) map[string]string {
|
||||
var done sync.Mutex
|
||||
submoduleList := make(map[string]string)
|
||||
|
||||
done.Lock()
|
||||
data_in, data_out := ChanIO{make(chan byte, 256)}, ChanIO{make(chan byte, 70)}
|
||||
|
||||
go func() {
|
||||
defer done.Unlock()
|
||||
defer close(data_out.ch)
|
||||
|
||||
data_out.Write([]byte(commitId))
|
||||
data_out.ch <- '\x00'
|
||||
c, err := parseGitCommit(data_in.ch)
|
||||
if err != nil {
|
||||
e.Error = err
|
||||
e.LogError("Error parsing git commit: %v", err)
|
||||
return
|
||||
}
|
||||
data_out.Write([]byte(c.Tree))
|
||||
data_out.ch <- '\x00'
|
||||
tree, err := parseGitTree(data_in.ch)
|
||||
|
||||
if err != nil {
|
||||
e.Error = err
|
||||
e.LogError("Error parsing git tree: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
for _, te := range tree.items {
|
||||
if te.isSubmodule() {
|
||||
submoduleList[te.name] = te.hash
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
cmd := exec.Command("/usr/bin/git", "cat-file", "--batch", "-Z")
|
||||
cmd.Env = []string{
|
||||
"GIT_CEILING_DIRECTORIES=" + e.GitPath,
|
||||
"GIT_CONFIG_GLOBAL=/dev/null",
|
||||
}
|
||||
cmd.Dir = filepath.Join(e.GitPath, cwd)
|
||||
cmd.Stdout = &data_in
|
||||
cmd.Stdin = &data_out
|
||||
cmd.Stderr = writeFunc(func(data []byte) (int, error) {
|
||||
e.Logger.LogError("%s", data)
|
||||
return len(data), nil
|
||||
})
|
||||
e.Log("command run: %v", cmd.Args)
|
||||
e.Error = cmd.Run()
|
||||
|
||||
done.Lock()
|
||||
return submoduleList
|
||||
}
|
||||
|
||||
func (e *RequestHandler) GitSubmoduleCommitId(cwd, packageName, commitId string) (string, bool) {
|
||||
if e.Error != nil {
|
||||
return "", false
|
||||
|
||||
Reference in New Issue
Block a user