예제 #1
0
파일: push.go 프로젝트: ralfcam/cli
func (cmd *Push) uploadApp(appGuid string, appDir string) (apiErr error) {
	fileutils.TempDir("apps", func(uploadDir string, err error) {
		if err != nil {
			apiErr = err
			return
		}

		presentFiles, hasFileToUpload, err := cmd.actor.GatherFiles(appDir, uploadDir)
		if err != nil {
			apiErr = err
			return
		}

		fileutils.TempFile("uploads", func(zipFile *os.File, err error) {
			if hasFileToUpload {
				err = cmd.zipAppFiles(zipFile, appDir, uploadDir)
				if err != nil {
					apiErr = err
					return
				}
			}

			err = cmd.actor.UploadApp(appGuid, zipFile, presentFiles)
			if err != nil {
				apiErr = err
				return
			}
		})
		return
	})
	return
}
func withFakeHome(callback func(dirPath string)) {
	fileutils.TempDir("test-config", func(dir string, err error) {
		if err != nil {
			Fail("Couldn't create tmp file")
		}
		callback(filepath.Join(dir, ".cf", "config.json"))
	})
}
예제 #3
0
파일: scanner.go 프로젝트: glyn/bloblets
func Scan(path string, processAppFiles func(appDir string, condensate bloblet.Condensate, affs []models.AppFileFields)) {
	zipper := app_files.ApplicationZipper{}

	if zipper.IsZipFile(path) {
		fileutils.TempDir("unzipped-app", func(tmpDir string, err error) {
			cliutil.Check(err)

			log.Println("Unzipping application")
			cliutil.Check(zipper.Unzip(path, tmpDir))
			log.Println("Unzipped application")

			doScan(tmpDir, processAppFiles)

			log.Println("Deleting unzipped application")
		})
	} else {
		doScan(path, processAppFiles)
	}
}
예제 #4
0
파일: push.go 프로젝트: glyn/cli
func (cmd *Push) uploadApp(appGuid string, appDir string) (apiErr error) {
	log.SetPrefix("cli")
	log.SetFlags(log.Ldate | log.Ltime | log.Lmicroseconds)
	log.Println("uploadApp started")
	fileutils.TempDir("apps", func(uploadDir string, err error) {
		if err != nil {
			apiErr = err
			return
		}

		presentFiles, hasFileToUpload, err := cmd.actor.GatherFiles(appDir, uploadDir)
		if err != nil {
			apiErr = err
			return
		}
		log.Printf("presentFiles = %#v\n", presentFiles)

		fileutils.TempFile("uploads", func(zipFile *os.File, err error) {
			if hasFileToUpload {
				log.Println("about to zipAppFiles")
				err = cmd.zipAppFiles(zipFile, appDir, uploadDir)
				if err != nil {
					apiErr = err
					return
				}
				log.Println("zipAppFiles completed")
			}

			log.Println("about to UploadApp")
			err = cmd.actor.UploadApp(appGuid, zipFile, presentFiles)
			if err != nil {
				apiErr = err
				return
			}
			log.Println("UploadApp completed")
		})
		return
	})
	log.Println("uploadApp ending")
	return
}
예제 #5
0
			copyDir := filepath.Join(fixturePath, "app-copy-test")

			filesToCopy := []models.AppFileFields{
				{Path: filepath.Join("dir1")},
				{Path: filepath.Join("dir1", "child-dir", "file2.txt")},
			}

			files := []string{}

			cffileutils.TempDir("copyToDir", func(tmpDir string, err error) {
				copyErr := CopyFiles(filesToCopy, copyDir, tmpDir)
				Expect(copyErr).ToNot(HaveOccurred())

				filepath.Walk(tmpDir, func(path string, fileInfo os.FileInfo, err error) error {
					Expect(err).ToNot(HaveOccurred())

					if !fileInfo.IsDir() {
						files = append(files, fileInfo.Name())
					}
					return nil
				})
			})

			// file2.txt is in lowest subtree, thus is walked first.
			Expect(files).To(Equal([]string{
				"file2.txt",
			}))
		})
	})
})
예제 #6
0
파일: client.go 프로젝트: glyn/bloblets
func main() {
	if len(os.Args) != 3 || len(os.Args) > 1 && os.Args[1] == "help" {
		fmt.Println("Usage: client host:port application-path")
		os.Exit(1)
	}

	log.Println("Push started")
	client := &http.Client{}
	server := os.Args[1]

	scanner.Scan(os.Args[2], func(appDir string, condensate bloblet.Condensate, appFiles []models.AppFileFields) {
		log.Println("Resource matching started")
		request := resmatch.ResMatchRequest(server, integrityFields(appFiles))

		log.Println("Resource matching sending request")
		response := cliutil.Converse(client, request)
		log.Println("Resource matching received response")

		presentIffs := resmatch.ProcessResponse(response)
		log.Println("Resource matching response demarshalled")

		presentFiles := intersectAppFilesIntegrityFields(appFiles, presentIffs)
		log.Println("Resource matching complete")

		appFilesToUpload := make([]models.AppFileFields, len(appFiles))
		copy(appFilesToUpload, appFiles)
		for _, file := range presentFiles {
			appFilesToUpload = deleteAppFile(appFilesToUpload, file.Path)
		}

		// Populate file modes
		var err error
		presentFiles, err = PopulateFileMode(appDir, presentFiles)
		cliutil.Check(err)

		hasFileToUpload := len(appFilesToUpload) > 0

		fileutils.TempDir("upload-dir", func(uploadDir string, err error) {
			cliutil.Check(err)

			var blobletsToUpload []bloblet.Bloblet
			blobletsToUpload, appFilesToUpload = condensate.Bloblets(appFilesToUpload)

			cliutil.Check(app_files.ApplicationFiles{}.CopyFiles(appFilesToUpload, appDir, uploadDir))

			fileutils.TempFile("uploads", func(zipFile *os.File, err error) {
				if hasFileToUpload {
					log.Println("Zipping application files")
					cliutil.Check(zipWithBetterErrors(uploadDir, zipFile))
					log.Println("Zipped application files")
				}

				log.Println("Uploading application")
				appbits.UploadApp(server, "test-guid", zipFile, blobletsToUpload, presentFiles)
				log.Println("Uploaded application")
				log.Println("Deleting uploads file")
			})
			log.Println("Deleting upload directory")
		})
	})
	log.Println("Push completed")
}