@@ -60,6 +60,30 @@ parse_otherdeps(struct parsedata *pd, struct solv_jsonparser *jp, Id handle, Id
6060 return type ;
6161}
6262
63+ static int
64+ parse_trackfeatures (struct parsedata * pd , struct solv_jsonparser * jp , Id handle )
65+ {
66+ int type = JP_ARRAY ;
67+ while (type > 0 && (type = jsonparser_parse (jp )) > 0 && type != JP_ARRAY_END )
68+ {
69+ if (type == JP_STRING )
70+ {
71+ char * p = jp -> value , * pe ;
72+ while (* p == ' ' || * p == '\t' )
73+ p ++ ;
74+ if (!* p )
75+ continue ;
76+ for (pe = p + strlen (p ) - 1 ; pe > p ; pe -- )
77+ if (* pe != ' ' && * pe != '\t' )
78+ break ;
79+ repodata_add_idarray (pd -> data , handle , SOLVABLE_TRACK_FEATURES , pool_strn2id (pd -> pool , p , pe - p + 1 , 1 ));
80+ }
81+ else
82+ type = jsonparser_skip (jp , type );
83+ }
84+ return type ;
85+ }
86+
6387static int
6488parse_package (struct parsedata * pd , struct solv_jsonparser * jp , char * kfn )
6589{
@@ -107,6 +131,22 @@ parse_package(struct parsedata *pd, struct solv_jsonparser *jp, char *kfn)
107131 ts /= 1000 ;
108132 repodata_set_num (data , handle , SOLVABLE_BUILDTIME , ts );
109133 }
134+ else if (type == JP_STRING && !strcmp (jp -> key , "track_features" ))
135+ {
136+ char * p = jp -> value , * pe ;
137+ for (; * p ; p ++ )
138+ {
139+ if (* p == ' ' || * p == '\t' || * p == ',' )
140+ continue ;
141+ pe = p + 1 ;
142+ while (* pe && * pe != ' ' && * pe != '\t' && * pe != ',' )
143+ pe ++ ;
144+ repodata_add_idarray (data , handle , SOLVABLE_TRACK_FEATURES , pool_strn2id (pool , p , pe - p , 1 ));
145+ p = pe - 1 ;
146+ }
147+ }
148+ else if (type == JP_ARRAY && !strcmp (jp -> key , "track_features" ))
149+ type = parse_trackfeatures (pd , jp , handle );
110150 else
111151 type = jsonparser_skip (jp , type );
112152 }
0 commit comments