@@ -298,8 +298,7 @@ startElement(struct solv_xmlparser *xmlp, int state, const char *name, const cha
298298 {
299299 const char * arch = 0 , * name = 0 ;
300300 Id evr = makeevr_atts (pool , pd , atts ); /* parse "epoch", "version", "release" */
301- Id n , a = 0 ;
302- Id rel_id ;
301+ Id n , a , id ;
303302
304303 for (; * atts ; atts += 2 )
305304 {
@@ -308,17 +307,24 @@ startElement(struct solv_xmlparser *xmlp, int state, const char *name, const cha
308307 else if (!strcmp (* atts , "name" ))
309308 name = atts [1 ];
310309 }
311- /* generated Id for name */
312- n = pool_str2id (pool , name , 1 );
313- rel_id = n ;
314- if (arch )
310+ n = name ? pool_str2id (pool , name , 1 ) : 0 ;
311+ a = arch ? pool_str2id (pool , arch , 1 ) : 0 ;
312+
313+ /* generated conflicts for the package */
314+ if (a && a != ARCH_NOARCH )
315+ {
316+ id = pool_rel2id (pool , n , a , REL_ARCH , 1 );
317+ id = pool_rel2id (pool , id , evr , REL_LT , 1 );
318+ solvable -> conflicts = repo_addid_dep (pd -> repo , solvable -> conflicts , id , 0 );
319+ id = pool_rel2id (pool , n , ARCH_NOARCH , REL_ARCH , 1 );
320+ id = pool_rel2id (pool , id , evr , REL_LT , 1 );
321+ solvable -> conflicts = repo_addid_dep (pd -> repo , solvable -> conflicts , id , 0 );
322+ }
323+ else
315324 {
316- /* generate Id for arch and combine with name */
317- a = pool_str2id (pool , arch , 1 );
318- rel_id = pool_rel2id (pool , n , a , REL_ARCH , 1 );
325+ id = pool_rel2id (pool , n , evr , REL_LT , 1 );
326+ solvable -> conflicts = repo_addid_dep (pd -> repo , solvable -> conflicts , id , 0 );
319327 }
320- rel_id = pool_rel2id (pool , rel_id , evr , REL_LT , 1 );
321- solvable -> conflicts = repo_addid_dep (pd -> repo , solvable -> conflicts , rel_id , 0 );
322328
323329 /* who needs the collection anyway? */
324330 pd -> collhandle = repodata_new_handle (pd -> data );
0 commit comments