@@ -54,16 +54,63 @@ fn main() {
5454 generate ( shell, & mut cmd, "dsc" , & mut io:: stdout ( ) ) ;
5555 } ,
5656 SubCommand :: Config { subcommand, parameters, parameters_file, system_root, as_group, as_assert, as_include } => {
57- if let Some ( file_name) = parameters_file {
57+ let merged_parameters = if parameters_file. is_some ( ) && parameters. is_some ( ) {
58+ // Both parameters and parameters_file provided - merge them with inline taking precedence
59+ let file_params = if let Some ( file_name) = & parameters_file {
60+ if file_name == "-" {
61+ info ! ( "{}" , t!( "main.readingParametersFromStdin" ) ) ;
62+ let mut stdin = Vec :: < u8 > :: new ( ) ;
63+ match io:: stdin ( ) . read_to_end ( & mut stdin) {
64+ Ok ( _) => {
65+ match String :: from_utf8 ( stdin) {
66+ Ok ( input) => Some ( input) ,
67+ Err ( err) => {
68+ error ! ( "{}: {err}" , t!( "util.invalidUtf8" ) ) ;
69+ exit ( EXIT_INVALID_INPUT ) ;
70+ }
71+ }
72+ } ,
73+ Err ( err) => {
74+ error ! ( "{}: {err}" , t!( "util.failedToReadStdin" ) ) ;
75+ exit ( EXIT_INVALID_INPUT ) ;
76+ }
77+ }
78+ } else {
79+ info ! ( "{}: {file_name}" , t!( "main.readingParametersFile" ) ) ;
80+ match std:: fs:: read_to_string ( file_name) {
81+ Ok ( content) => Some ( content) ,
82+ Err ( err) => {
83+ error ! ( "{} '{file_name}': {err}" , t!( "main.failedReadingParametersFile" ) ) ;
84+ exit ( util:: EXIT_INVALID_INPUT ) ;
85+ }
86+ }
87+ }
88+ } else {
89+ None
90+ } ;
91+
92+ // Parse both and merge
93+ if let ( Some ( file_content) , Some ( inline_content) ) = ( file_params, parameters. as_ref ( ) ) {
94+ info ! ( "{}" , t!( "main.mergingParameters" ) ) ;
95+ match util:: merge_parameters ( & file_content, inline_content) {
96+ Ok ( merged) => Some ( merged) ,
97+ Err ( err) => {
98+ error ! ( "{}: {err}" , t!( "main.failedMergingParameters" ) ) ;
99+ exit ( EXIT_INVALID_INPUT ) ;
100+ }
101+ }
102+ } else {
103+ parameters. clone ( )
104+ }
105+ } else if let Some ( file_name) = parameters_file {
106+ // Only parameters_file provided
58107 if file_name == "-" {
59108 info ! ( "{}" , t!( "main.readingParametersFromStdin" ) ) ;
60109 let mut stdin = Vec :: < u8 > :: new ( ) ;
61- let parameters = match io:: stdin ( ) . read_to_end ( & mut stdin) {
110+ match io:: stdin ( ) . read_to_end ( & mut stdin) {
62111 Ok ( _) => {
63112 match String :: from_utf8 ( stdin) {
64- Ok ( input) => {
65- input
66- } ,
113+ Ok ( input) => Some ( input) ,
67114 Err ( err) => {
68115 error ! ( "{}: {err}" , t!( "util.invalidUtf8" ) ) ;
69116 exit ( EXIT_INVALID_INPUT ) ;
@@ -74,22 +121,22 @@ fn main() {
74121 error ! ( "{}: {err}" , t!( "util.failedToReadStdin" ) ) ;
75122 exit ( EXIT_INVALID_INPUT ) ;
76123 }
77- } ;
78- subcommand:: config ( & subcommand, & Some ( parameters) , true , system_root. as_ref ( ) , & as_group, & as_assert, & as_include, progress_format) ;
79- return ;
80- }
81- info ! ( "{}: {file_name}" , t!( "main.readingParametersFile" ) ) ;
82- match std:: fs:: read_to_string ( & file_name) {
83- Ok ( parameters) => subcommand:: config ( & subcommand, & Some ( parameters) , false , system_root. as_ref ( ) , & as_group, & as_assert, & as_include, progress_format) ,
84- Err ( err) => {
85- error ! ( "{} '{file_name}': {err}" , t!( "main.failedReadingParametersFile" ) ) ;
86- exit ( util:: EXIT_INVALID_INPUT ) ;
124+ }
125+ } else {
126+ info ! ( "{}: {file_name}" , t!( "main.readingParametersFile" ) ) ;
127+ match std:: fs:: read_to_string ( & file_name) {
128+ Ok ( content) => Some ( content) ,
129+ Err ( err) => {
130+ error ! ( "{} '{file_name}': {err}" , t!( "main.failedReadingParametersFile" ) ) ;
131+ exit ( util:: EXIT_INVALID_INPUT ) ;
132+ }
87133 }
88134 }
89- }
90- else {
91- subcommand:: config ( & subcommand, & parameters, false , system_root. as_ref ( ) , & as_group, & as_assert, & as_include, progress_format) ;
92- }
135+ } else {
136+ parameters
137+ } ;
138+
139+ subcommand:: config ( & subcommand, & merged_parameters, false , system_root. as_ref ( ) , & as_group, & as_assert, & as_include, progress_format) ;
93140 } ,
94141 SubCommand :: Extension { subcommand } => {
95142 subcommand:: extension ( & subcommand, progress_format) ;
0 commit comments