func (repo CloudControllerApplicationBitsRepository) UploadApp(appGuid string, appDir string, cb func(path string, zipSize, fileCount uint64)) (apiErr error) { fileutils.TempDir("apps", func(uploadDir string, err error) { if err != nil { apiErr = err return } var presentFiles []resources.AppFileResource repo.sourceDir(appDir, func(sourceDir string, sourceErr error) { if sourceErr != nil { err = sourceErr return } presentFiles, err = repo.copyUploadableFiles(sourceDir, uploadDir) }) if err != nil { apiErr = err return } fileutils.TempFile("uploads", func(zipFile *os.File, err error) { if err != nil { apiErr = err return } zipFileSize := uint64(0) zipFileCount := uint64(0) err = repo.zipper.Zip(uploadDir, zipFile) switch err := err.(type) { case nil: stat, err := zipFile.Stat() if err != nil { apiErr = errors.NewWithError("Error zipping application", err) return } zipFileSize = uint64(stat.Size()) zipFileCount = app_files.CountFiles(uploadDir) case *errors.EmptyDirError: zipFile = nil default: apiErr = errors.NewWithError("Error zipping application", err) return } cb(appDir, zipFileSize, zipFileCount) apiErr = repo.uploadBits(appGuid, zipFile, presentFiles) if apiErr != nil { return } }) }) return }
func (repo CloudControllerApplicationBitsRepository) UploadApp(appGuid string, appDir string, cb func(path string, zipSize, fileCount uint64)) (apiErr error) { fileutils.TempDir("apps", func(uploadDir string, err error) { if err != nil { apiErr = err return } var presentResourcesJson []byte repo.sourceDir(appDir, func(sourceDir string, sourceErr error) { if sourceErr != nil { err = sourceErr return } presentResourcesJson, err = repo.copyUploadableFiles(sourceDir, uploadDir) }) if err != nil { apiErr = err return } fileutils.TempFile("uploads", func(zipFile *os.File, err error) { if err != nil { apiErr = err return } err = repo.zipper.Zip(uploadDir, zipFile) if err != nil { apiErr = errors.NewWithError("Error zipping application", err) return } stat, err := zipFile.Stat() if err != nil { apiErr = errors.NewWithError("Error zipping application", err) return } cb(appDir, uint64(stat.Size()), app_files.CountFiles(uploadDir)) apiErr = repo.uploadBits(appGuid, zipFile, presentResourcesJson) if apiErr != nil { return } }) }) return }