@@ -13,11 +13,18 @@ import (
1313 "github.com/praqma/git-phlow/plugins"
1414)
1515
16- //Load internals
16+ //Config git group.name
1717const (
18- phlow_file_name = ".phlow"
19- git_config_fileName = ".gitconfig"
20- default_block = "default"
18+ default_block = "phlow"
19+ phlow_file_name = ".phlow"
20+ git_config_fileName = ".gitconfig"
21+ config_default_block = "phlow"
22+ config_service = "service"
23+ config_remote = "remote"
24+ config_service_url = "service-url"
25+ config_pipeline = "pipeline"
26+ config_integration_branch = "integration-branch"
27+ config_delivery_branch_prefix = "delivery-branch-prefix"
2128)
2229
2330//Default configuration
@@ -56,9 +63,57 @@ type ProjectSetting struct {
5663//NewProjectStg ...
5764//initializes project settings from .phlow INI files
5865func NewProjectStg (INIBlock string ) * ProjectSetting {
59- r := GetLocal ()
60- g := GetGlobal ()
61- return LoadProjectSettings (r , g , INIBlock )
66+ return LoadSettings (INIBlock , githandler.Git {Run : executor .RunGit })
67+ }
68+
69+ func LoadSettings (INIBlock string , git githandler.Git ) * ProjectSetting {
70+
71+ //no params have been given, search for default
72+ if INIBlock == "" {
73+ INIBlock = config_default_block
74+ }
75+
76+ //Load all configurations using git config
77+ //Errors result in an empty config string, which is git's way to return empty config
78+ service , _ := git .Config ("--get" , fmt .Sprintf ("%s.%s" , INIBlock , "token" ))
79+ serviceURL , _ := git .Config ("--get" , INIBlock + "." + config_service_url )
80+ remote , _ := git .Config ("--get" , INIBlock + "." + config_remote )
81+ deliveryBranch , _ := git .Config ("--get" , INIBlock + "." + config_delivery_branch_prefix )
82+ integrationBranch , _ := git .Config ("--get" , INIBlock + "." + config_integration_branch )
83+
84+ loadedSetting := ProjectSetting {
85+ Service : service ,
86+ IssueURL : serviceURL ,
87+ Remote : remote ,
88+ IntegrationBranch : integrationBranch ,
89+ DeliveryBranchPrefix : deliveryBranch ,
90+ INIBlock : INIBlock ,
91+ }
92+
93+ err := ValidateLoadedSetting (& loadedSetting )
94+ if err != nil {
95+ //It is the default config, so we will just go to the internal default
96+ if INIBlock == config_default_block {
97+ defaultBranch , err := GetDefaultBranchFromInternalDefault ()
98+ if err != nil || strings .TrimSpace (defaultBranch ) == "" {
99+ defaultBranch = internal_default_integration_branch
100+ }
101+ return & ProjectSetting {
102+ Service : internal_default_service ,
103+ IntegrationBranch : defaultBranch ,
104+ Remote : internal_default_remote ,
105+ IssueURL : internal_default_issue_url ,
106+ DeliveryBranchPrefix : internal_default_delivery_branch_prefix ,
107+ PipelineUrl : internal_pipeline_url ,
108+ Scope : internal_default_scope ,
109+ File : internal_default_file ,
110+ }
111+ }
112+ fmt .Println (err )
113+ os .Exit (1 )
114+ }
115+
116+ return & loadedSetting
62117}
63118
64119//NewToolStg ...
@@ -185,28 +240,28 @@ func ValidateLoadedSetting(setting *ProjectSetting) error {
185240 //Non Optional Field checks..
186241 for i := 0 ; i < t .NumField (); i ++ {
187242 if t .Field (i ).Name == "Service" && (r .Field (i ).String () == "" ) {
188- return errors .New (fmt .Sprintf ("Error in configuration file: %s \n " +
189- "Non-optional field missing: %s \n In configuration block: %s \n " , setting . Scope + "/" + setting . File , "service" , setting .INIBlock ))
243+ return errors .New (fmt .Sprintf ("Error in configuration\n " +
244+ "Non-optional field missing: %s \n In configuration block: %s \n " , "service" , setting .INIBlock ))
190245 }
191246
192247 if t .Field (i ).Name == "IssueURL" && r .Field (i ).String () == "" {
193- return errors .New (fmt .Sprintf ("Error in configuration file: %s \n " +
194- "Non-optional field missing: %s \n In configuration block: %s \n " , setting . Scope + "/" + setting . File , "issue_url" , setting .INIBlock ))
248+ return errors .New (fmt .Sprintf ("Error in configuration\n " +
249+ "Non-optional field missing: %s \n In configuration block: %s \n " , "issue_url" , setting .INIBlock ))
195250 }
196251
197252 if t .Field (i ).Name == "IntegrationBranch" && r .Field (i ).String () == "" {
198- return errors .New (fmt .Sprintf ("Error in configuration file: %s \n " +
199- "Non-optional field missing: %s \n In configuration block: %s \n " , setting . Scope + "/" + setting . File , "integration_branch" , setting .INIBlock ))
253+ return errors .New (fmt .Sprintf ("Error in configuration\n " +
254+ "Non-optional field missing: %s \n In configuration block: %s \n " , "integration_branch" , setting .INIBlock ))
200255 }
201256
202257 if t .Field (i ).Name == "Remote" && r .Field (i ).String () == "" {
203- return errors .New (fmt .Sprintf ("Error in configuration file: %s \n " +
204- "Non-optional field missing: %s \n In configuration block: %s \n " , setting . Scope + "/" + setting . File , "remote" , setting .INIBlock ))
258+ return errors .New (fmt .Sprintf ("Error in configuration\n " +
259+ "Non-optional field missing: %s \n In configuration block: %s \n " , "remote" , setting .INIBlock ))
205260 }
206261
207262 if t .Field (i ).Name == "DeliveryBranchPrefix" && r .Field (i ).String () == "" {
208- return errors .New (fmt .Sprintf ("Error in configuration file: %s \n " +
209- "Non-optional field missing: %s \n In configuration block: %s \n " , setting . Scope + "/" + setting . File , "delivery_branch_prefix" , setting .INIBlock ))
263+ return errors .New (fmt .Sprintf ("Error in configuration\n " +
264+ "Non-optional field missing: %s \n In configuration block: %s \n " , "delivery_branch_prefix" , setting .INIBlock ))
210265 }
211266 }
212267 return nil
0 commit comments