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,13 @@ 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+
36+ idxIn , err := idxInput (in )
37+ if err != nil {
38+ return err
39+ }
40+
41+ dec := idxfile .NewDecoder (idxIn , hash .New (crypto .SHA1 ))
3342
3443 if err := dec .Decode (idx ); err != nil {
3544 return fmt .Errorf ("decode idx: %w" , err )
@@ -56,3 +65,36 @@ func showIndexRun(in io.Reader, out io.Writer) error {
5665
5766 return nil
5867}
68+
69+ func idxInput (in io.Reader ) (idxfile.Input , error ) {
70+ b , err := io .ReadAll (in )
71+ if err != nil {
72+ return nil , fmt .Errorf ("read idx input: %w" , err )
73+ }
74+
75+ return & memoryIdxInput {
76+ Reader : bytes .NewReader (b ),
77+ size : int64 (len (b )),
78+ }, nil
79+ }
80+
81+ type memoryIdxInput struct {
82+ * bytes.Reader
83+
84+ size int64
85+ }
86+
87+ func (in * memoryIdxInput ) Stat () (fs.FileInfo , error ) {
88+ return memoryIdxFileInfo {size : in .size }, nil
89+ }
90+
91+ type memoryIdxFileInfo struct {
92+ size int64
93+ }
94+
95+ func (fi memoryIdxFileInfo ) Name () string { return "" }
96+ func (fi memoryIdxFileInfo ) Size () int64 { return fi .size }
97+ func (fi memoryIdxFileInfo ) Mode () fs.FileMode { return 0 }
98+ func (fi memoryIdxFileInfo ) ModTime () time.Time { return time.Time {} }
99+ func (fi memoryIdxFileInfo ) IsDir () bool { return false }
100+ func (fi memoryIdxFileInfo ) Sys () any { return nil }
0 commit comments