This is an automated email from the ASF dual-hosted git repository. nferraro pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel-k.git
commit e47c8f8fc8c1e75e8855e45e33ebf6c5fea9e1d5 Author: Doru Bercea <gheorghe-teod.ber...@ibm.com> AuthorDate: Fri Oct 9 12:38:38 2020 -0400 Move dependencies to dependencies folder. --- pkg/cmd/inspect.go | 120 ++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 82 insertions(+), 38 deletions(-) diff --git a/pkg/cmd/inspect.go b/pkg/cmd/inspect.go index b10d32a..b3ef4ec 100644 --- a/pkg/cmd/inspect.go +++ b/pkg/cmd/inspect.go @@ -39,9 +39,10 @@ import ( var acceptedDependencyTypes = []string{"bom", "camel", "camel-k", "camel-quarkus", "mvn", "github"} const ( - defaultRuntimeVersion = "1.3.0" - defaultCamelVersion = "3.3.0" - defaultWorkspaceDirectoryName = "workspace" + defaultRuntimeVersion = "1.3.0" + defaultCamelVersion = "3.3.0" + defaultWorkspaceDirectoryName = "workspace" + defaultDependenciesDirectoryName = "dependencies" ) func newCmdInspect(rootCmdOptions *RootCmdOptions) (*cobra.Command, *inspectCmdOptions) { @@ -50,14 +51,21 @@ func newCmdInspect(rootCmdOptions *RootCmdOptions) (*cobra.Command, *inspectCmdO } cmd := cobra.Command{ - Use: "inspect [files to inspect]", - Short: "Generate dependencies list the given integration files.", - Long: "Output dependencies for a list of integration files. By default this command returns the top level dependencies only.", + Use: "inspect [files to inspect]", + Short: "Generate dependencies list given integration files.", + Long: ` + Output dependencies for a list of integration files. By default this command returns the +top level dependencies only. When --all-dependencies is enabled, the transitive dependencies +will be generated by calling Maven and then copied into the directory pointed to by the +--dependencies-directory flag.`, PreRunE: decode(&options), RunE: func(_ *cobra.Command, args []string) error { if err := options.validate(args); err != nil { return err } + if err := options.initialize(args); err != nil { + return err + } if err := options.run(args); err != nil { fmt.Println(err.Error()) } @@ -69,10 +77,10 @@ func newCmdInspect(rootCmdOptions *RootCmdOptions) (*cobra.Command, *inspectCmdO }, } - cmd.Flags().Bool("all-dependencies", false, "Compute and output transitive dependencies.") + cmd.Flags().Bool("all-dependencies", false, "Compute transitive dependencies and move them to directory pointed to by the --dependencies-directory flag.") cmd.Flags().String("additional-dependencies", "", `Comma-separated list of additional top-level dependencies with the format: - <type>:<dependency-name> - where <type> is one of {`+strings.Join(acceptedDependencyTypes, "|")+`}.`) +<type>:<dependency-name> +where <type> is one of {`+strings.Join(acceptedDependencyTypes, "|")+`}.`) cmd.Flags().String("workspace", "", "Absolute path to workspace directory. Default: <kamel-invocation-directory>/workspace") cmd.Flags().StringP("output", "o", "", "Output format. One of: json|yaml") cmd.Flags().String("dependencies-directory", "", "Absolute path to directory containing all dependencies. Default: <kamel-invocation-directory>/workspace/dependencies") @@ -149,6 +157,26 @@ func (command *inspectCmdOptions) validate(args []string) error { return nil } +func (command *inspectCmdOptions) initialize(args []string) error { + // If --all-dependencies flag is set the workspace and dependencies directories need to have + // valid values. If not provided on the command line, the values need to be initialized with + // their default values. + if command.AllDependencies { + // Create workspace directory to hold all intermediate files. + err := createAndSetWorkspaceDirectory(command) + if err != nil { + return err + } + + // Move the integration dependecies to the dependencies directory. + err = createAndSetDependenciesDirectory(command) + if err != nil { + return err + } + } + return nil +} + func (command *inspectCmdOptions) run(args []string) error { // Attempt to reuse existing Camel catalog if one is present. catalog, err := camel.MainCatalog() @@ -178,25 +206,19 @@ func (command *inspectCmdOptions) run(args []string) error { } } - // If --all-dependencies flag is set, add transitive dependencies. - if command.AllDependencies { - // Create workspace directory to hold all intermediate files. - workspaceDirectory, err := getWorkspaceDirectory(command) - if err != nil { - return err + // Top level dependencies are printed out. + if !command.AllDependencies { + for _, dep := range dependencies { + fmt.Printf("%v\n", dep) } // The dependencies var will contain both top level and transitive dependencies. - dependencies, err = getTransitiveDependencies(catalog, dependencies, workspaceDirectory) + err = getTransitiveDependencies(catalog, dependencies, command) if err != nil { return err } } - for _, dep := range dependencies { - fmt.Printf("%v\n", dep) - } - return nil } @@ -279,7 +301,7 @@ func printDependencies(format string, dependecies *strset.Set) error { func getTransitiveDependencies( catalog *camel.RuntimeCatalog, dependencies []string, - workspaceDirectory string) ([]string, error) { + command *inspectCmdOptions) error { mvn := v1.MavenSpec{ LocalRepository: "", @@ -291,51 +313,73 @@ func getTransitiveDependencies( // Inject dependencies into Maven project. err := builder.InjectDependenciesCommon(&project, dependencies, catalog) if err != nil { - return []string{}, err + return err } // Create local Maven context. - mc := maven.NewContext(path.Join(workspaceDirectory, "maven"), project) + mc := maven.NewContext(path.Join(command.Workspace, "maven"), project) mc.LocalRepository = mvn.LocalRepository mc.Timeout = mvn.GetTimeout().Duration // Compute dependencies. content, err := runtime.ComputeDependenciesCommon(mc, catalog.Runtime.Version) if err != nil { - return nil, err + return err } - // Compose artifcats list. + // Compose artifacts list. artifacts := []v1.Artifact{} - artifacts, err = runtime.ProcessTransitiveDependencies(content, "dependencies") + artifacts, err = runtime.ProcessTransitiveDependencies(content, command.DependenciesDirectory) if err != nil { - return nil, err + return err } - allDependencies := strset.New() for _, entry := range artifacts { - allDependencies.Add(fmt.Sprintf("%s\n", entry.Location)) + // Copy dependencies from Maven default directory to the DependenciesDirectory. + _, err := util.CopyFile(entry.Location, entry.Target) + if err != nil { + return err + } } - return allDependencies.List(), nil + return nil } -func getWorkspaceDirectory(command *inspectCmdOptions) (string, error) { - // Path to workspace directory. - workspaceDirectory := command.Workspace +func createAndSetWorkspaceDirectory(command *inspectCmdOptions) error { if command.Workspace == "" { currentDirectory, err := os.Getwd() if err != nil { - return "", err + return err + } + command.Workspace = path.Join(currentDirectory, defaultWorkspaceDirectoryName) + } + + // Create the workspace directory if it does not already exist. + err := util.CreateDirectory(command.Workspace) + if err != nil { + return err + } + + return nil +} + +func createAndSetDependenciesDirectory(command *inspectCmdOptions) error { + if command.DependenciesDirectory == "" { + if command.Workspace == "" { + err := createAndSetWorkspaceDirectory(command) + if err != nil { + return err + } } - workspaceDirectory = path.Join(currentDirectory, defaultWorkspaceDirectoryName) + + command.DependenciesDirectory = path.Join(command.Workspace, defaultDependenciesDirectoryName) } // Create the workspace directory if it does not already exist. - err := util.CreateDirectory(workspaceDirectory) + err := util.CreateDirectory(command.DependenciesDirectory) if err != nil { - return "", err + return err } - return workspaceDirectory, nil + return nil }