@@ -120,36 +120,37 @@ static void show_config_human(struct string_list *keys)
120120 }
121121}
122122
123- static void show_config_sections (struct string_list * keys )
123+ static void grab_leading_part (struct string_list * keys , const char * var , int use_dot )
124124{
125- struct string_list keys_uniq = STRING_LIST_INIT_DUP ;
126- struct strbuf sb = STRBUF_INIT ;
127- struct string_list_item * item ;
125+ const char * cut = NULL ;
128126
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- }
127+ if (use_dot )
128+ cut = strchr (var , use_dot );
148129
130+ if (!cut ) {
131+ size_t prefix_len = strcspn (var , "*<" );
132+ if (var [prefix_len ])
133+ cut = var + prefix_len ;
134+ }
135+
136+ if (!cut )
137+ string_list_append (keys , var );
138+ else {
139+ struct strbuf sb = STRBUF_INIT ;
149140 strbuf_add (& sb , var , cut - var );
150- string_list_append (& keys_uniq , sb .buf );
141+ string_list_append (keys , sb .buf );
151142 strbuf_release (& sb );
152143 }
144+ }
145+
146+ static void show_config_sections (struct string_list * keys )
147+ {
148+ struct string_list keys_uniq = STRING_LIST_INIT_DUP ;
149+ struct string_list_item * item ;
150+
151+ for (size_t i = 0 ; i < keys -> nr ; i ++ )
152+ grab_leading_part (& keys_uniq , keys -> items [i ].string , '.' );
153+
153154 string_list_sort_u (& keys_uniq , 0 );
154155 for_each_string_list_item (item , & keys_uniq )
155156 puts (item -> string );
@@ -159,30 +160,11 @@ static void show_config_sections(struct string_list *keys)
159160static void show_config_vars (struct string_list * keys )
160161{
161162 struct string_list keys_uniq = STRING_LIST_INIT_DUP ;
162- struct strbuf sb = STRBUF_INIT ;
163163 struct string_list_item * item ;
164164
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- }
165+ for (size_t i = 0 ; i < keys -> nr ; i ++ )
166+ grab_leading_part (& keys_uniq , keys -> items [i ].string , '\0' );
181167
182- strbuf_add (& sb , var , cut - var );
183- string_list_append (& keys_uniq , sb .buf );
184- strbuf_release (& sb );
185- }
186168 string_list_sort_u (& keys_uniq , 0 );
187169 for_each_string_list_item (item , & keys_uniq )
188170 puts (item -> string );
0 commit comments