mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
+2
-1
@@ -1,6 +1,7 @@
|
||||
package cli
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
@@ -70,7 +71,7 @@ func templateInit() *cobra.Command {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = provisionersdk.Untar(directory, archive)
|
||||
err = provisionersdk.Untar(directory, bytes.NewReader(archive))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
+21
-8
@@ -1,6 +1,7 @@
|
||||
package cli
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
@@ -34,14 +35,17 @@ func (pf *templateUploadFlags) stdin() bool {
|
||||
|
||||
func (pf *templateUploadFlags) upload(cmd *cobra.Command, client *codersdk.Client) (*codersdk.UploadResponse, error) {
|
||||
var (
|
||||
content []byte
|
||||
err error
|
||||
content io.Reader
|
||||
pipeErrCh = make(chan error, 1)
|
||||
)
|
||||
if pf.stdin() {
|
||||
content, err = io.ReadAll(cmd.InOrStdin())
|
||||
content = cmd.InOrStdin()
|
||||
// No piping if reading from stdin.
|
||||
pipeErrCh <- nil
|
||||
close(pipeErrCh)
|
||||
} else {
|
||||
prettyDir := prettyDirectoryPath(pf.directory)
|
||||
_, err = cliui.Prompt(cmd, cliui.PromptOptions{
|
||||
_, err := cliui.Prompt(cmd, cliui.PromptOptions{
|
||||
Text: fmt.Sprintf("Upload %q?", prettyDir),
|
||||
IsConfirm: true,
|
||||
Default: cliui.ConfirmYes,
|
||||
@@ -50,10 +54,16 @@ func (pf *templateUploadFlags) upload(cmd *cobra.Command, client *codersdk.Clien
|
||||
return nil, err
|
||||
}
|
||||
|
||||
content, err = provisionersdk.Tar(pf.directory, provisionersdk.TemplateArchiveLimit)
|
||||
}
|
||||
if err != nil {
|
||||
return nil, xerrors.Errorf("read tar: %w", err)
|
||||
pipeReader, pipeWriter := io.Pipe()
|
||||
go func() {
|
||||
defer pipeWriter.Close()
|
||||
defer close(pipeErrCh)
|
||||
bufWr := bufio.NewWriter(pipeWriter)
|
||||
defer bufWr.Flush()
|
||||
pipeErrCh <- provisionersdk.Tar(bufWr, pf.directory, provisionersdk.TemplateArchiveLimit)
|
||||
}()
|
||||
defer pipeReader.Close()
|
||||
content = pipeReader
|
||||
}
|
||||
|
||||
spin := spinner.New(spinner.CharSets[5], 100*time.Millisecond)
|
||||
@@ -66,6 +76,9 @@ func (pf *templateUploadFlags) upload(cmd *cobra.Command, client *codersdk.Clien
|
||||
if err != nil {
|
||||
return nil, xerrors.Errorf("upload: %w", err)
|
||||
}
|
||||
if err = <-pipeErrCh; err != nil {
|
||||
return nil, xerrors.Errorf("pipe: %w", err)
|
||||
}
|
||||
return &resp, nil
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user