11package main
22
33import (
4+ "bytes"
45 "crypto"
56 "errors"
67 "fmt"
78 "io"
9+ "io/fs"
10+ "time"
811
912 "github.com/go-git/go-git/v6/plumbing/format/idxfile"
1013 "github.com/go-git/go-git/v6/plumbing/hash"
@@ -29,7 +32,12 @@ var showIndexCmd = &cobra.Command{
2932
3033func showIndexRun (in io.Reader , out io.Writer ) error {
3134 idx := idxfile .NewMemoryIndex (crypto .SHA1 .Size ())
32- dec := idxfile .NewDecoder (in , hash .New (crypto .SHA1 ))
35+ idxIn , err := idxInput (in )
36+ if err != nil {
37+ return err
38+ }
39+
40+ dec := idxfile .NewDecoder (idxIn , hash .New (crypto .SHA1 ))
3341
3442 if err := dec .Decode (idx ); err != nil {
3543 return fmt .Errorf ("decode idx: %w" , err )
@@ -56,3 +64,35 @@ func showIndexRun(in io.Reader, out io.Writer) error {
5664
5765 return nil
5866}
67+
68+ func idxInput (in io.Reader ) (idxfile.Input , error ) {
69+ b , err := io .ReadAll (in )
70+ if err != nil {
71+ return nil , fmt .Errorf ("read idx input: %w" , err )
72+ }
73+
74+ return & memoryIdxInput {
75+ Reader : bytes .NewReader (b ),
76+ size : int64 (len (b )),
77+ }, nil
78+ }
79+
80+ type memoryIdxInput struct {
81+ * bytes.Reader
82+ size int64
83+ }
84+
85+ func (in * memoryIdxInput ) Stat () (fs.FileInfo , error ) {
86+ return memoryIdxFileInfo {size : in .size }, nil
87+ }
88+
89+ type memoryIdxFileInfo struct {
90+ size int64
91+ }
92+
93+ func (fi memoryIdxFileInfo ) Name () string { return "" }
94+ func (fi memoryIdxFileInfo ) Size () int64 { return fi .size }
95+ func (fi memoryIdxFileInfo ) Mode () fs.FileMode { return 0 }
96+ func (fi memoryIdxFileInfo ) ModTime () time.Time { return time.Time {} }
97+ func (fi memoryIdxFileInfo ) IsDir () bool { return false }
98+ func (fi memoryIdxFileInfo ) Sys () any { return nil }
0 commit comments