@@ -26,13 +26,70 @@ import (
2626 "github.com/spf13/viper"
2727)
2828
29+ func PrintProjects (allProjects []* models.Project ) error {
30+ log .WithField ("count" , len (allProjects )).Debug ("Number of projects fetched" )
31+ if len (allProjects ) == 0 {
32+ log .Info ("No projects found" )
33+ return nil
34+ }
35+ formatFlag := viper .GetString ("output-format" )
36+ if formatFlag != "" {
37+ log .WithField ("output_format" , formatFlag ).Debug ("Output format selected" )
38+ err := utils .PrintFormat (allProjects , formatFlag )
39+ if err != nil {
40+ return err
41+ }
42+ } else {
43+ log .Debug ("Listing projects using default view" )
44+ if err := list .ListProjects (allProjects ); err != nil {
45+ return err
46+ }
47+ }
48+ return nil
49+ }
50+ func BuildListOptions (private , public bool , opts * api.ListFlags , fuzzy , match , ranges []string ) (func (... api.ListFlags ) (project.ListProjectsOK , error ), error ) {
51+ var listFunc func (... api.ListFlags ) (project.ListProjectsOK , error )
52+ log .Debug ("Starting project list command" )
53+
54+ if opts .PageSize > 100 || opts .PageSize < 0 {
55+ return nil , fmt .Errorf ("page size should be greater than or equal to 0 and less than or equal to 100" )
56+ }
57+
58+ if private && public {
59+ return nil , fmt .Errorf ("Cannot specify both --private and --public flags" )
60+ }
61+
62+ if private {
63+ log .Debug ("Using private project list function" )
64+ opts .Public = false
65+ listFunc = api .ListProject
66+ } else if public {
67+ log .Debug ("Using public project list function" )
68+ opts .Public = true
69+ listFunc = api .ListProject
70+ } else {
71+ log .Debug ("Using list all projects function" )
72+ listFunc = api .ListAllProjects
73+ }
74+
75+ if len (fuzzy ) != 0 || len (match ) != 0 || len (ranges ) != 0 { // Only Building Query if a param exists
76+ q , qErr := utils .BuildQueryParam (fuzzy , match , ranges ,
77+ []string {"name" , "project_id" , "public" , "creation_time" , "owner_id" },
78+ )
79+ if qErr != nil {
80+ return nil , qErr
81+ }
82+
83+ opts .Q = q
84+ }
85+ return listFunc , nil
86+ }
2987func ListProjectCommand () * cobra.Command {
3088 var (
3189 opts api.ListFlags
3290 private bool
3391 public bool
3492 allProjects []* models.Project
35- err error
3693 // For querying, opts.Q
3794 fuzzy []string
3895 match []string
@@ -43,66 +100,17 @@ func ListProjectCommand() *cobra.Command {
43100 Short : "List projects" ,
44101 Args : cobra .ExactArgs (0 ),
45102 RunE : func (cmd * cobra.Command , args []string ) error {
46- log .Debug ("Starting project list command" )
47-
48- if opts .PageSize < 0 {
49- return fmt .Errorf ("page size must be greater than or equal to 0" )
50- }
51-
52- if opts .PageSize > 100 {
53- return fmt .Errorf ("page size should be less than or equal to 100" )
54- }
55-
56- if private && public {
57- return fmt .Errorf ("Cannot specify both --private and --public flags" )
58- }
59-
60- var listFunc func (... api.ListFlags ) (project.ListProjectsOK , error )
61- if private {
62- log .Debug ("Using private project list function" )
63- opts .Public = false
64- listFunc = api .ListProject
65- } else if public {
66- log .Debug ("Using public project list function" )
67- opts .Public = true
68- listFunc = api .ListProject
69- } else {
70- log .Debug ("Using list all projects function" )
71- listFunc = api .ListAllProjects
72- }
73-
74- if len (fuzzy ) != 0 || len (match ) != 0 || len (ranges ) != 0 { // Only Building Query if a param exists
75- q , qErr := utils .BuildQueryParam (fuzzy , match , ranges ,
76- []string {"name" , "project_id" , "public" , "creation_time" , "owner_id" },
77- )
78- if qErr != nil {
79- return qErr
80- }
81-
82- opts .Q = q
103+ listFunc , err := BuildListOptions (private , public , & opts , fuzzy , match , ranges )
104+ if err != nil {
105+ return err
83106 }
84-
85107 log .Debug ("Fetching projects..." )
86108 allProjects , err = fetchProjects (listFunc , opts )
87109 if err != nil {
88- return fmt .Errorf ("failed to get projects list: %v" , utils .ParseHarborErrorMsg (err ))
89- }
90-
91- log .WithField ("count" , len (allProjects )).Debug ("Number of projects fetched" )
92- if len (allProjects ) == 0 {
93- log .Info ("No projects found" )
94- return nil
110+ return fmt .Errorf ("%s" , utils .ParseHarborErrorMsg (err ))
95111 }
96- formatFlag := viper .GetString ("output-format" )
97- if formatFlag != "" {
98- log .WithField ("output_format" , formatFlag ).Debug ("Output format selected" )
99- err = utils .PrintFormat (allProjects , formatFlag )
100- if err != nil {
101- return err
102- }
103- } else {
104- log .Debug ("Listing projects using default view" )
105- list .ListProjects (allProjects )
112+ if err := PrintProjects (allProjects ); err != nil {
113+ return err
106114 }
107115 return nil
108116 },
0 commit comments