MCPcopy Index your code
hub / github.com/coder/coder / Archive

Function Archive

examples/examples.go:122–221  ·  view source on GitHub ↗

Archive returns a tar by example ID.

(exampleID string)

Source from the content-addressed store, hash-verified

120
121// Archive returns a tar by example ID.
122func Archive(exampleID string) ([]byte, error) {
123 rawData, err, _ := archives.Do(exampleID, func() (interface{}, error) {
124 examples, err := List()
125 if err != nil {
126 return nil, xerrors.Errorf("list: %w", err)
127 }
128
129 var selected codersdk.TemplateExample
130 for _, example := range examples {
131 if example.ID != exampleID {
132 continue
133 }
134 selected = example
135 break
136 }
137
138 if selected.ID == "" {
139 return nil, xerrors.Errorf("example with id %q not found: %w", exampleID, ErrNotFound)
140 }
141
142 exampleFiles, err := fs.Sub(files, path.Join(rootDir, exampleID))
143 if err != nil {
144 return nil, xerrors.Errorf("get example fs: %w", err)
145 }
146
147 var buffer bytes.Buffer
148 tarWriter := tar.NewWriter(&buffer)
149
150 err = fs.WalkDir(exampleFiles, ".", func(path string, entry fs.DirEntry, err error) error {
151 if err != nil {
152 return err
153 }
154 if path == "." {
155 // Tar files don't have a root directory.
156 return nil
157 }
158
159 info, err := entry.Info()
160 if err != nil {
161 return xerrors.Errorf("stat file: %w", err)
162 }
163
164 header, err := tar.FileInfoHeader(info, "")
165 if err != nil {
166 return xerrors.Errorf("get file header: %w", err)
167 }
168 header.Name = strings.TrimPrefix(path, "./")
169 header.Mode = 0o644
170
171 if entry.IsDir() {
172 // Trailing slash on entry name is not required. Our tar
173 // creation code for tarring up a local directory doesn't
174 // include slashes so this we don't include them here for
175 // consistency.
176 // header.Name += "/"
177 header.Mode = 0o755
178 header.Typeflag = tar.TypeDir
179 err = tarWriter.WriteHeader(header)

Callers 5

templateInitMethod · 0.92
TestTemplateFunction · 0.92
TestSubdirsFunction · 0.92

Calls 9

ListFunction · 0.70
DoMethod · 0.65
CloseMethod · 0.65
CopyMethod · 0.65
ErrorfMethod · 0.45
InfoMethod · 0.45
WriteHeaderMethod · 0.45
OpenMethod · 0.45
BytesMethod · 0.45

Tested by 3

TestTemplateFunction · 0.74
TestSubdirsFunction · 0.74