You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwhisk.apache.org by mr...@apache.org on 2017/10/05 14:17:06 UTC

[incubator-openwhisk-wskdeploy] branch master updated: Fixing concurrent access to single zip file (#588)

This is an automated email from the ASF dual-hosted git repository.

mrutkowski pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-openwhisk-wskdeploy.git


The following commit(s) were added to refs/heads/master by this push:
     new 45238bb  Fixing concurrent access to single zip file (#588)
45238bb is described below

commit 45238bba9cdad48634e57ffe820ad14ac431feee
Author: Priti Desai <pd...@us.ibm.com>
AuthorDate: Thu Oct 5 07:17:04 2017 -0700

    Fixing concurrent access to single zip file (#588)
    
    * Fixing concurrent access to single zip file
    
    * empty commit to invoke travis build
    
    * Changing projectPath
---
 utils/gitreader.go | 74 ++++++++++++++++++++++++++++++++----------------------
 1 file changed, 44 insertions(+), 30 deletions(-)

diff --git a/utils/gitreader.go b/utils/gitreader.go
index 8d04b3b..9d9c84b 100644
--- a/utils/gitreader.go
+++ b/utils/gitreader.go
@@ -26,15 +26,18 @@ import (
 	"path"
 	"path/filepath"
 	"strings"
+
+	"io/ioutil"
 )
 
 type GitReader struct {
-	Name        string	// the name of the dependency
-	Url         string	// pkg repo location, e.g. github.com/user/repo
+	Name string // the name of the dependency
+	Url  string // pkg repo location, e.g. github.com/user/repo
 	//BaseRepo    string	// base url of the git repo, e.g. github.com/user/repo
 	//SubFolder   string	// subfolder of the package under BaseUrl
 	Version     string
-	ProjectPath string	// The root folder of all dependency packages, e.g. src_project_path/Packages
+	ProjectPath string // The root folder of all dependency packages, e.g. src_project_path/Packages
+	packageName string
 }
 
 func NewGitReader(projectName string, record DependencyRecord) *GitReader {
@@ -44,37 +47,47 @@ func NewGitReader(projectName string, record DependencyRecord) *GitReader {
 	gitReader.Url = record.BaseRepo
 	gitReader.Version = record.Version
 	gitReader.ProjectPath = record.ProjectPath
+	gitReader.packageName = record.Packagename
 
 	return &gitReader
 
 }
 
 func (reader *GitReader) CloneDependency() error {
-	zipFileName := reader.Name + "." + reader.Version + ".zip"
+
+	zipFilePrefix := reader.Name + "." + reader.Version + ".zip."
 	zipFilePath := reader.Url + "/zipball" + "/" + reader.Version
 
-	os.MkdirAll(reader.ProjectPath, os.ModePerm)
-	output, err := os.Create(path.Join(reader.ProjectPath, zipFileName))
+	projectPath := reader.ProjectPath
+	os.MkdirAll(projectPath, os.ModePerm)
+
+	zipFile, err := ioutil.TempFile(projectPath, zipFilePrefix)
 	if err != nil {
-        return err
-    }
-	defer output.Close()
+		return err
+	}
+	zipFileName := zipFile.Name()
+	defer os.Remove(zipFileName)
 
 	response, err := http.Get(zipFilePath)
-    if err != nil {
-        return err
-    }
+	if err != nil {
+		return err
+	}
 	defer response.Body.Close()
 
-	_, err = io.Copy(output, response.Body)
-    if err != nil {
-        return err
-    }
+	data, err := ioutil.ReadAll(response.Body)
+	if err != nil {
+		return err
+	}
 
-	zipReader, err := zip.OpenReader(path.Join(reader.ProjectPath, zipFileName))
-    if err != nil {
-        return err
-    }
+	_, err = zipFile.Write([]byte(data))
+	if err != nil {
+		return err
+	}
+
+	zipReader, err := zip.OpenReader(zipFileName)
+	if err != nil {
+		return err
+	}
 
 	u, err := url.Parse(reader.Url)
 	team, _ := path.Split(u.Path)
@@ -83,7 +96,7 @@ func (reader *GitReader) CloneDependency() error {
 	team = strings.TrimSuffix(team, "/")
 
 	for _, file := range zipReader.File {
-		path := filepath.Join(reader.ProjectPath, file.Name)
+		path := filepath.Join(projectPath, file.Name)
 
 		if file.FileInfo().IsDir() {
 			os.MkdirAll(path, file.Mode())
@@ -91,15 +104,15 @@ func (reader *GitReader) CloneDependency() error {
 		}
 
 		fileReader, err := file.Open()
-        if err != nil {
-            return err
-        }
+		if err != nil {
+			return err
+		}
 		defer fileReader.Close()
 
 		targetFile, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, file.Mode())
-        if err != nil {
-            return err
-        }
+		if err != nil {
+			return err
+		}
 		defer targetFile.Close()
 
 		if _, err := io.Copy(targetFile, fileReader); err != nil {
@@ -107,14 +120,15 @@ func (reader *GitReader) CloneDependency() error {
 		}
 	}
 
-	rootDir := filepath.Join(reader.ProjectPath, zipReader.File[0].Name)
-	depPath := filepath.Join(reader.ProjectPath, reader.Name+"-"+reader.Version)
+	rootDir := filepath.Join(projectPath, zipReader.File[0].Name)
+	depPath := filepath.Join(projectPath, reader.Name+"-"+reader.Version)
+
 	//if the folder exists, remove it at first
 	if _, err := os.Stat(depPath); err == nil {
 		os.Remove(depPath)
 	}
+
 	os.Rename(rootDir, depPath)
-	os.Remove(filepath.Join(reader.ProjectPath, zipFileName))
 
 	return nil
 }

-- 
To stop receiving notification emails like this one, please contact
['"commits@openwhisk.apache.org" <co...@openwhisk.apache.org>'].