func install(l, version string) error { var currentStep lang.Step var bar *pb.ProgressBar var process *Process fmt.Printf("Installing %s@%s\n", l, version) err := service.Install(l, version, binaryFlag, func(step lang.Step, progress, total int64) { if currentStep != step { if bar != nil { bar.NotPrint = true bar.Finish() fmt.Printf(ascii2.EraseLine) bar = nil } if process != nil { process.Done("") process = nil } if total > 0 { bar = pb.New64(total).Prefix(" " + stepToMsg(step) + "\t\t") bar.SetWidth(40) bar.ShowCounters = false //fmt.Printf("%s\n", step) //bar.NotPrint = true bar.Start() currentStep = step } else { process := &Process{Msg: stepToMsg(step) + "\t\t"} process.Start() } } if bar != nil { bar.Set64(progress) } }) if bar != nil { bar.NotPrint = true bar.Finish() fmt.Printf(ascii2.EraseLines(2) + ascii2.EraseLine + fmt.Sprintf(" %s installed", l)) } if process != nil { process.Done("\n") } //fmt.Printf(ascii2.EraseLine + ascii2.CursorUp(1) + ascii2.EraseLine) if err != nil { fmt.Printf("Could not install %s@%s: \n %s\n", l, version, err.Error()) } else { fmt.Printf(" %s@%s installed!\n\n", l, version) } return err }
// PostMultipartP posts a multipart message in the MIME internet format with a callback function with a string stating the upload Progress. func (c *Client) PostMultipartP(path string, files map[string][]byte, params Params, out interface{}, callback func(s string)) error { body := &bytes.Buffer{} writer := multipart.NewWriter(body) for name, source := range files { part, err := writer.CreateFormFile(name, "source.tgz") if err != nil { return err } _, err = io.Copy(part, bytes.NewReader(source)) if err != nil { return err } } for name, value := range params { writer.WriteField(name, value) } err := writer.Close() if err != nil { return err } var bodyReader io.Reader bodyReader = body var bar *pb.ProgressBar if callback != nil { bar = pb.New(body.Len()).SetUnits(pb.U_BYTES) bar.NotPrint = true bar.ShowBar = false bar.Callback = callback bar.Start() bodyReader = bar.NewProxyReader(body) } req, err := c.request("POST", path, bodyReader) if err != nil { return err } req.SetBasicAuth("convox", string(c.Password)) req.Header.Set("Content-Type", writer.FormDataContentType()) res, err := c.client().Do(req) if err != nil { return err } defer res.Body.Close() if err := responseError(res); err != nil { return err } data, err := ioutil.ReadAll(res.Body) if err != nil { return err } if out != nil { err = json.Unmarshal(data, out) if err != nil { return err } } if callback != nil { bar.Finish() } return nil }
Cobra is a CLI library for Go that empowers applications. This application is a tool to generate the needed files to quickly create a Cobra application.`, Run: func(cmd *cobra.Command, args []string) { // TODO: Work your own magic here fmt.Println("test called") var currentStep lang.Step var bar *pb.ProgressBar var process *Process testSteps(func(step lang.Step, progress, total int64) { if currentStep != step { if bar != nil { bar.NotPrint = true bar.Finish() fmt.Printf(ascii2.EraseLine) bar = nil } if process != nil { process.Done("") process = nil } if total > 0 { bar = pb.New64(total).Prefix(" " + stepToMsg(step) + "\t\t") bar.SetWidth(40) bar.ShowCounters = false