@@ -111,6 +111,84 @@ struct slot_expansion {
111111 int found ;
112112};
113113
114+ static void show_config_human (struct string_list * keys )
115+ {
116+ string_list_sort (keys );
117+ for (size_t i = 0 ; i < keys -> nr ; i ++ ) {
118+ const char * var = keys -> items [i ].string ;
119+ puts (var );
120+ }
121+ }
122+
123+ static void show_config_sections (struct string_list * keys )
124+ {
125+ struct string_list keys_uniq = STRING_LIST_INIT_DUP ;
126+ struct strbuf sb = STRBUF_INIT ;
127+ struct string_list_item * item ;
128+
129+ for (size_t i = 0 ; i < keys -> nr ; i ++ ) {
130+ const char * var = keys -> items [i ].string ;
131+ const char * dot = strchr (var , '.' );
132+ const char * wildcard = strchr (var , '*' );
133+ const char * tag = strchr (var , '<' );
134+ const char * cut ;
135+
136+ if (dot )
137+ cut = dot ;
138+ else if (wildcard && tag )
139+ cut = wildcard < tag ? wildcard : tag ;
140+ else if (wildcard )
141+ cut = wildcard ;
142+ else if (tag )
143+ cut = tag ;
144+ else {
145+ string_list_append (& keys_uniq , var );
146+ continue ;
147+ }
148+
149+ strbuf_add (& sb , var , cut - var );
150+ string_list_append (& keys_uniq , sb .buf );
151+ strbuf_release (& sb );
152+ }
153+ string_list_sort_u (& keys_uniq , 0 );
154+ for_each_string_list_item (item , & keys_uniq )
155+ puts (item -> string );
156+ string_list_clear (& keys_uniq , 0 );
157+ }
158+
159+ static void show_config_vars (struct string_list * keys )
160+ {
161+ struct string_list keys_uniq = STRING_LIST_INIT_DUP ;
162+ struct strbuf sb = STRBUF_INIT ;
163+ struct string_list_item * item ;
164+
165+ for (size_t i = 0 ; i < keys -> nr ; i ++ ) {
166+ const char * var = keys -> items [i ].string ;
167+ const char * wildcard = strchr (var , '*' );
168+ const char * tag = strchr (var , '<' );
169+ const char * cut ;
170+
171+ if (wildcard && tag )
172+ cut = wildcard < tag ? wildcard : tag ;
173+ else if (wildcard )
174+ cut = wildcard ;
175+ else if (tag )
176+ cut = tag ;
177+ else {
178+ string_list_append (& keys_uniq , var );
179+ continue ;
180+ }
181+
182+ strbuf_add (& sb , var , cut - var );
183+ string_list_append (& keys_uniq , sb .buf );
184+ strbuf_release (& sb );
185+ }
186+ string_list_sort_u (& keys_uniq , 0 );
187+ for_each_string_list_item (item , & keys_uniq )
188+ puts (item -> string );
189+ string_list_clear (& keys_uniq , 0 );
190+ }
191+
114192static void list_config_help (enum show_config_type type )
115193{
116194 struct slot_expansion slot_expansions [] = {
@@ -129,8 +207,6 @@ static void list_config_help(enum show_config_type type)
129207 const char * * p ;
130208 struct slot_expansion * e ;
131209 struct string_list keys = STRING_LIST_INIT_DUP ;
132- struct string_list keys_uniq = STRING_LIST_INIT_DUP ;
133- struct string_list_item * item ;
134210
135211 for (p = config_name_list ; * p ; p ++ ) {
136212 const char * var = * p ;
@@ -156,50 +232,20 @@ static void list_config_help(enum show_config_type type)
156232 BUG ("slot_expansion %s.%s is not used" ,
157233 e -> prefix , e -> placeholder );
158234
159- string_list_sort (& keys );
160- for (size_t i = 0 ; i < keys .nr ; i ++ ) {
161- const char * var = keys .items [i ].string ;
162- const char * wildcard , * tag , * cut ;
163- const char * dot = NULL ;
164- struct strbuf sb = STRBUF_INIT ;
165-
166- switch (type ) {
167- case SHOW_CONFIG_HUMAN :
168- puts (var );
169- continue ;
170- case SHOW_CONFIG_SECTIONS :
171- dot = strchr (var , '.' );
172- break ;
173- case SHOW_CONFIG_VARS :
174- break ;
175- }
176- wildcard = strchr (var , '*' );
177- tag = strchr (var , '<' );
178-
179- if (!dot && !wildcard && !tag ) {
180- string_list_append (& keys_uniq , var );
181- continue ;
182- }
183-
184- if (dot )
185- cut = dot ;
186- else if (wildcard && !tag )
187- cut = wildcard ;
188- else if (!wildcard && tag )
189- cut = tag ;
190- else
191- cut = wildcard < tag ? wildcard : tag ;
192-
193- strbuf_add (& sb , var , cut - var );
194- string_list_append (& keys_uniq , sb .buf );
195- strbuf_release (& sb );
196-
235+ switch (type ) {
236+ case SHOW_CONFIG_HUMAN :
237+ show_config_human (& keys );
238+ break ;
239+ case SHOW_CONFIG_SECTIONS :
240+ show_config_sections (& keys );
241+ break ;
242+ case SHOW_CONFIG_VARS :
243+ show_config_vars (& keys );
244+ break ;
245+ default :
246+ BUG ("%d: unexpected type" , type );
197247 }
198248 string_list_clear (& keys , 0 );
199- string_list_remove_duplicates (& keys_uniq , 0 );
200- for_each_string_list_item (item , & keys_uniq )
201- puts (item -> string );
202- string_list_clear (& keys_uniq , 0 );
203249}
204250
205251static enum help_format parse_help_format (const char * format )
0 commit comments