func unpackIndex(ctx context.Context, pack *indexpack.Archive, dir string) error { fetcher := pack.Fetcher(ctx) return pack.ReadUnits(ctx, formatKey, func(u interface{}) error { unit, ok := u.(*apb.CompilationUnit) if !ok { return fmt.Errorf("%T is not a CompilationUnit", u) } idx, err := kindex.FromUnit(unit, fetcher) if err != nil { return fmt.Errorf("error creating kindex: %v", err) } path := kindexPath(dir, idx) if !*quiet { log.Println("Writing compilation unit to", path) } f, err := vfs.Create(ctx, path) if err != nil { return fmt.Errorf("error creating output file: %v", err) } if _, err := idx.WriteTo(f); err != nil { f.Close() // try to close file before returning return fmt.Errorf("error writing output file: %v", err) } return f.Close() }) }