Use pipeline for GetSubmoduleCommits
Signed-off-by: Steffen Schröter <steffen@vexar.de>
This commit is contained in:
parent
6df3da1daf
commit
4113314f37
1 changed files with 27 additions and 10 deletions
|
@ -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 {
|
||||||
|
|
Loading…
Add table
Reference in a new issue