mrutkows closed pull request #744: fixing seg violation error
URL: https://github.com/apache/incubator-openwhisk-wskdeploy/pull/744
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/deployers/manifestreader.go b/deployers/manifestreader.go
index 6c433fb3..a7d1c69a 100644
--- a/deployers/manifestreader.go
+++ b/deployers/manifestreader.go
@@ -52,12 +52,12 @@ func (deployer *ManifestReader) ParseManifest() 
(*parsers.YAML, *parsers.YAMLPar
        return manifest, manifestParser, nil
 }
 
-func (reader *ManifestReader) InitRootPackage(manifestParser 
*parsers.YAMLParser, manifest *parsers.YAML, ma whisk.KeyValue) error {
+func (reader *ManifestReader) InitPackages(manifestParser *parsers.YAMLParser, 
manifest *parsers.YAML, ma whisk.KeyValue) error {
        packages, err := manifestParser.ComposeAllPackages(manifest, 
reader.serviceDeployer.ManifestPath, ma)
        if err != nil {
                return err
        }
-       reader.SetPackage(packages)
+       reader.SetPackages(packages)
 
        return nil
 }
@@ -161,7 +161,7 @@ func (reader *ManifestReader) SetDependencies(deps 
map[string]utils.DependencyRe
        return nil
 }
 
-func (reader *ManifestReader) SetPackage(packages map[string]*whisk.Package) 
error {
+func (reader *ManifestReader) SetPackages(packages map[string]*whisk.Package) 
error {
 
        dep := reader.serviceDeployer
 
diff --git a/deployers/manifestreader_test.go b/deployers/manifestreader_test.go
index b4cc6725..05d51ba9 100644
--- a/deployers/manifestreader_test.go
+++ b/deployers/manifestreader_test.go
@@ -46,15 +46,15 @@ func TestManifestReader_ParseManifest(t *testing.T) {
 }
 
 // Test could Init root package successfully.
-func TestManifestReader_InitRootPackage(t *testing.T) {
-       err := mr.InitRootPackage(ps, ms, whisk.KeyValue{})
+func TestManifestReader_InitPackages(t *testing.T) {
+       err := mr.InitPackages(ps, ms, whisk.KeyValue{})
        assert.Equal(t, err, nil, "Init Root Package failed")
 }
 
 // Test Parameters
 func TestManifestReader_param(t *testing.T) {
        ms, _ := ps.ParseManifest("../tests/dat/manifest6.yaml")
-       err := mr.InitRootPackage(ps, ms, whisk.KeyValue{})
+       err := mr.InitPackages(ps, ms, whisk.KeyValue{})
        assert.Equal(t, err, nil, "Init Root Package failed")
 
        // TODO(#695) Is there more to do here?  Original author left a TODO 
here in comments
diff --git a/deployers/servicedeployer.go b/deployers/servicedeployer.go
index 1bb2f5e4..69f0baed 100644
--- a/deployers/servicedeployer.go
+++ b/deployers/servicedeployer.go
@@ -81,16 +81,15 @@ func NewDeploymentPackage() *DeploymentPackage {
 //   3. Collect information about the source code files in the working 
directory
 //   4. Create a deployment plan to create OpenWhisk service
 type ServiceDeployer struct {
-       ProjectName     string
-       Deployment      *DeploymentProject
-       Client          *whisk.Client
-       mt              sync.RWMutex
-       RootPackageName string
-       IsInteractive   bool
-       IsDefault       bool
-       ManifestPath    string
-       ProjectPath     string
-       DeploymentPath  string
+       ProjectName    string
+       Deployment     *DeploymentProject
+       Client         *whisk.Client
+       mt             sync.RWMutex
+       IsInteractive  bool
+       IsDefault      bool
+       ManifestPath   string
+       ProjectPath    string
+       DeploymentPath string
        // whether to deploy the action under the package
        DeployActionInPackage bool
        InteractiveChoice     bool
@@ -132,7 +131,6 @@ func (deployer *ServiceDeployer) ConstructDeploymentPlan() 
error {
                return err
        }
 
-       deployer.RootPackageName = manifest.Package.Packagename
        deployer.ProjectName = manifest.GetProject().Name
 
        // Generate Managed Annotations if its marked as a Managed Deployment
@@ -155,7 +153,7 @@ func (deployer *ServiceDeployer) ConstructDeploymentPlan() 
error {
                }
        }
 
-       manifestReader.InitRootPackage(manifestParser, manifest, 
deployer.ManagedAnnotation)
+       manifestReader.InitPackages(manifestParser, manifest, 
deployer.ManagedAnnotation)
 
        if deployer.IsDefault == true {
                fileReader := NewFileSystemReader(deployer)
@@ -236,8 +234,7 @@ func (deployer *ServiceDeployer) 
ConstructUnDeploymentPlan() (*DeploymentProject
                return deployer.Deployment, err
        }
 
-       deployer.RootPackageName = manifest.Package.Packagename
-       manifestReader.InitRootPackage(manifestParser, manifest, 
whisk.KeyValue{})
+       manifestReader.InitPackages(manifestParser, manifest, whisk.KeyValue{})
 
        // process file system
        if deployer.IsDefault == true {
@@ -453,6 +450,19 @@ func (deployer *ServiceDeployer) DeployDependencies() 
error {
                                        return err
                                }
 
+                               dependentPackages := []string{}
+                               for k := range 
depServiceDeployer.Deployment.Packages {
+                                       dependentPackages = 
append(dependentPackages, k)
+                               }
+
+                               if len(dependentPackages) > 1 {
+                                       errMessage := "GitHub dependency " + 
depName + " has multiple packages in manifest file: " +
+                                               strings.Join(dependentPackages, 
", ") + ". " +
+                                               "One GitHub dependency can only 
be associated with single package in manifest file." +
+                                               "There is no way to reference 
actions from multiple packages of any GitHub dependencies."
+                                       return 
wskderrors.NewYAMLFileFormatError(deployer.ManifestPath, errMessage)
+                               }
+
                                if err := depServiceDeployer.deployAssets(); 
err != nil {
                                        errString := 
wski18n.T(wski18n.ID_MSG_DEPENDENCY_DEPLOYMENT_FAILURE_X_name_X,
                                                
map[string]interface{}{wski18n.KEY_NAME: depName})
@@ -460,16 +470,17 @@ func (deployer *ServiceDeployer) DeployDependencies() 
error {
                                        return err
                                }
 
-                               // if the RootPackageName is different from 
depName
-                               // create a binding to the origin package
-                               if depServiceDeployer.RootPackageName != 
depName {
+                               // if the dependency name in the original 
package
+                               // is different from the package name in the 
manifest
+                               // file of dependent github repo, create a 
binding to the origin package
+                               if ok := 
depServiceDeployer.Deployment.Packages[depName]; ok == nil {
                                        bindingPackage := 
new(whisk.BindingPackage)
                                        bindingPackage.Namespace = 
pack.Package.Namespace
                                        bindingPackage.Name = depName
                                        pub := false
                                        bindingPackage.Publish = &pub
 
-                                       qName, err := 
utils.ParseQualifiedName(depServiceDeployer.RootPackageName, 
depServiceDeployer.Deployment.Packages[depServiceDeployer.RootPackageName].Package.Namespace)
+                                       qName, err := 
utils.ParseQualifiedName(dependentPackages[0], 
depServiceDeployer.Deployment.Packages[dependentPackages[0]].Package.Namespace)
                                        if err != nil {
                                                return err
                                        }
@@ -914,9 +925,6 @@ func (deployer *ServiceDeployer) createRule(rule 
*whisk.Rule) error {
        // if it contains a slash, then the action is qualified by a package 
name
        if strings.Contains(rule.Action.(string), "/") {
                rule.Action = deployer.getQualifiedName(rule.Action.(string), 
deployer.ClientConfig.Namespace)
-       } else {
-               // if not, we assume the action is inside the root package
-               rule.Action = 
deployer.getQualifiedName(strings.Join([]string{deployer.RootPackageName, 
rule.Action.(string)}, "/"), deployer.ClientConfig.Namespace)
        }
 
        var err error
@@ -1090,8 +1098,13 @@ func (deployer *ServiceDeployer) UnDeployDependencies() 
error {
                                        return err
                                }
 
+                               dependentPackages := []string{}
+                               for k := range 
depServiceDeployer.Deployment.Packages {
+                                       dependentPackages = 
append(dependentPackages, k)
+                               }
+
                                // delete binding pkg if the origin package 
name is different
-                               if depServiceDeployer.RootPackageName != 
depName {
+                               if ok := 
depServiceDeployer.Deployment.Packages[depName]; ok == nil {
                                        if _, _, ok := 
deployer.Client.Packages.Get(depName); ok == nil {
                                                var err error
                                                var response *http.Response


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


With regards,
Apache Git Services

Reply via email to