Use pipeline for GetSubmoduleCommits

Signed-off-by: Steffen Schröter <steffen@vexar.de>
This commit is contained in:
Steffen Schröter 2021-07-05 19:43:05 +02:00
parent 6df3da1daf
commit 4113314f37

View file

@ -6,7 +6,9 @@
package git package git
import ( import (
"bufio"
"fmt" "fmt"
"io"
"net" "net"
"net/url" "net/url"
"path" "path"
@ -133,25 +135,40 @@ func (sf *SubModuleFile) RefID() string {
// GetSubmoduleCommits Returns a list of active submodules in the repository // GetSubmoduleCommits Returns a list of active submodules in the repository
func GetSubmoduleCommits(repoPath string) []SubModuleCommit { func GetSubmoduleCommits(repoPath string) []SubModuleCommit {
stdoutReader, stdoutWriter := io.Pipe()
defer func() {
_ = stdoutReader.Close()
_ = stdoutWriter.Close()
}()
go func() {
stderrBuilder := &strings.Builder{}
err := NewCommand("config", "-f", ".gitmodules", "--list", "--name-only").RunInDirPipeline(repoPath, stdoutWriter, stderrBuilder)
if err != nil {
_ = stdoutWriter.CloseWithError(ConcatenateError(err, stderrBuilder.String()))
} else {
_ = stdoutWriter.Close()
}
}()
var submodules []SubModuleCommit var submodules []SubModuleCommit
bufReader := bufio.NewReader(stdoutReader)
submoduleOut, err := NewCommand("config", "-f", ".gitmodules", "--list", "--name-only"). for {
RunInDir(repoPath) line, err := bufReader.ReadString('\n')
if err != nil { if err != nil {
// Command fails if there are no or invalid submodules, just return an empty list break
return submodules }
}
for _, line := range strings.Split(strings.TrimSuffix(submoduleOut, "\n"), "\n") { if len(line) < len("submodule.x.url\n") ||
if len(line) < len("submodule.x.url") ||
!strings.HasPrefix(line, "submodule.") || !strings.HasPrefix(line, "submodule.") ||
!strings.HasSuffix(line, ".url") { !strings.HasSuffix(line, ".url\n") {
continue continue
} }
name := line[len("submodule.") : len(line)-len(".url")] name := line[len("submodule.") : len(line)-len(".url\n")]
name = strings.TrimSpace(name) name = strings.TrimSpace(name)
if len(name) == 0 { if len(name) == 0 {