commands/status: partition results of scanIndex()
This commit is contained in:
parent
babed9a0e3
commit
0fb059d709
@ -30,35 +30,11 @@ func statusCommand(cmd *cobra.Command, args []string) {
|
|||||||
|
|
||||||
statusScanRefRange(ref)
|
statusScanRefRange(ref)
|
||||||
|
|
||||||
entries, errs, err := scanIndex(scanIndexAt)
|
staged, unstaged, err := scanIndex(scanIndexAt)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ExitWithError(err)
|
ExitWithError(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
staged := make([]*lfs.DiffIndexEntry, 0)
|
|
||||||
unstaged := make([]*lfs.DiffIndexEntry, 0)
|
|
||||||
|
|
||||||
L:
|
|
||||||
for {
|
|
||||||
select {
|
|
||||||
case entry, ok := <-entries:
|
|
||||||
if !ok {
|
|
||||||
break L
|
|
||||||
}
|
|
||||||
|
|
||||||
switch entry.Status {
|
|
||||||
case lfs.StatusModification:
|
|
||||||
unstaged = append(unstaged, entry)
|
|
||||||
default:
|
|
||||||
staged = append(staged, entry)
|
|
||||||
}
|
|
||||||
case err := <-errs:
|
|
||||||
if err != nil {
|
|
||||||
ExitWithError(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Print("\nGit LFS objects to be committed:\n")
|
Print("\nGit LFS objects to be committed:\n")
|
||||||
for _, entry := range staged {
|
for _, entry := range staged {
|
||||||
switch entry.Status {
|
switch entry.Status {
|
||||||
@ -77,7 +53,7 @@ L:
|
|||||||
Print("")
|
Print("")
|
||||||
}
|
}
|
||||||
|
|
||||||
func scanIndex(ref string) (<-chan *lfs.DiffIndexEntry, <-chan error, error) {
|
func scanIndex(ref string) (staged, unstaged []*lfs.DiffIndexEntry, err error) {
|
||||||
uncached, err := lfs.NewDiffIndexScanner(ref, false)
|
uncached, err := lfs.NewDiffIndexScanner(ref, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
@ -88,39 +64,36 @@ func scanIndex(ref string) (<-chan *lfs.DiffIndexEntry, <-chan error, error) {
|
|||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
entries := make(chan *lfs.DiffIndexEntry)
|
seenNames := make(map[string]struct{}, 0)
|
||||||
errs := make(chan error)
|
|
||||||
|
|
||||||
go func() {
|
for _, scanner := range []*lfs.DiffIndexScanner{
|
||||||
seenNames := make(map[string]struct{}, 0)
|
uncached, cached,
|
||||||
|
} {
|
||||||
|
for scanner.Scan() {
|
||||||
|
entry := scanner.Entry()
|
||||||
|
|
||||||
for _, scanner := range []*lfs.DiffIndexScanner{
|
name := entry.DstName
|
||||||
uncached, cached,
|
if len(name) == 0 {
|
||||||
} {
|
name = entry.SrcName
|
||||||
for scanner.Scan() {
|
|
||||||
entry := scanner.Entry()
|
|
||||||
|
|
||||||
name := entry.DstName
|
|
||||||
if len(name) == 0 {
|
|
||||||
name = entry.SrcName
|
|
||||||
}
|
|
||||||
|
|
||||||
if _, seen := seenNames[name]; !seen {
|
|
||||||
entries <- entry
|
|
||||||
seenNames[name] = struct{}{}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := scanner.Err(); err != nil {
|
if _, seen := seenNames[name]; !seen {
|
||||||
errs <- err
|
switch entry.Status {
|
||||||
|
case lfs.StatusModification:
|
||||||
|
unstaged = append(unstaged, entry)
|
||||||
|
default:
|
||||||
|
staged = append(staged, entry)
|
||||||
|
}
|
||||||
|
|
||||||
|
seenNames[name] = struct{}{}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
close(entries)
|
if err := scanner.Err(); err != nil {
|
||||||
close(errs)
|
return nil, nil, err
|
||||||
}()
|
}
|
||||||
|
}
|
||||||
return entries, errs, nil
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func statusScanRefRange(ref *git.Ref) {
|
func statusScanRefRange(ref *git.Ref) {
|
||||||
@ -153,23 +126,13 @@ func statusScanRefRange(ref *git.Ref) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func porcelainStagedPointers(ref string) {
|
func porcelainStagedPointers(ref string) {
|
||||||
entries, errs, err := scanIndex(ref)
|
staged, unstaged, err := scanIndex(ref)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ExitWithError(err)
|
ExitWithError(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
L:
|
for _, entry := range append(unstaged, staged...) {
|
||||||
for {
|
Print(porcelainStatusLine(entry))
|
||||||
select {
|
|
||||||
case entry, ok := <-entries:
|
|
||||||
if !ok {
|
|
||||||
break L
|
|
||||||
}
|
|
||||||
|
|
||||||
Print(porcelainStatusLine(entry))
|
|
||||||
case err := <-errs:
|
|
||||||
ExitWithError(err)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user