func (c *orgRepoConfig) union(c2 *orgRepoConfig) *orgRepoConfig {
	res := &orgRepoConfig{
		orgExceptions: make(map[string]sets.String),
		repos:         sets.NewString(),
	}

	for org, excepts1 := range c.orgExceptions {
		// keep only items in both blacklists that are not in the
		// explicit repo whitelists for the other configuration;
		// we know from how the orgRepoConfigs are constructed that
		// a org blacklist won't intersect it's own repo whitelist
		pruned := excepts1.Difference(c2.repos)
		if excepts2, ok := c2.orgExceptions[org]; ok {
			res.orgExceptions[org] = pruned.Intersection(excepts2.Difference(c.repos))
		} else {
			res.orgExceptions[org] = pruned
		}
	}

	for org, excepts2 := range c2.orgExceptions {
		// update any blacklists not previously updated
		if _, exists := res.orgExceptions[org]; !exists {
			res.orgExceptions[org] = excepts2.Difference(c.repos)
		}
	}

	// we need to prune out repos in the whitelists which are
	// covered by an org already; we know from above that no
	// org blacklist in the result will contain a repo whitelist
	for _, repo := range c.repos.Union(c2.repos).UnsortedList() {
		parts := strings.SplitN(repo, "/", 2)
		if len(parts) != 2 {
			logrus.Warnf("org/repo %q is formatted incorrectly", repo)
			continue
		}
		if _, exists := res.orgExceptions[parts[0]]; !exists {
			res.repos.Insert(repo)
		}
	}
	return res
}
func (c *orgRepoConfig) union(c2 *orgRepoConfig) *orgRepoConfig {
	res := &orgRepoConfig{
		orgExceptions: make(map[string]sets.String),
		repos:         sets.NewString(),
	}

	for org, excepts1 := range c.orgExceptions {
		
		
		
		
		pruned := excepts1.Difference(c2.repos)
		if excepts2, ok := c2.orgExceptions[org]; ok {
			res.orgExceptions[org] = pruned.Intersection(excepts2.Difference(c.repos))
		} else {
			res.orgExceptions[org] = pruned
		}
	}

	for org, excepts2 := range c2.orgExceptions {
		
		if _, exists := res.orgExceptions[org]; !exists {
			res.orgExceptions[org] = excepts2.Difference(c.repos)
		}
	}

	
	
	
	for _, repo := range c.repos.Union(c2.repos).UnsortedList() {
		parts := strings.SplitN(repo, "/", 2)
		if len(parts) != 2 {
			logrus.Warnf("org/repo %q is formatted incorrectly", repo)
			continue
		}
		if _, exists := res.orgExceptions[parts[0]]; !exists {
			res.repos.Insert(repo)
		}
	}
	return res
}
func ( c * orgRepoConfig ) union ( c2 * orgRepoConfig ) * orgRepoConfig { res := & orgRepoConfig { orgExceptions : make ( map [ string ] sets . String ) , repos : sets . NewString ( ) , } for org , excepts1 := range c . orgExceptions { // keep only items in both blacklists that are not in the // explicit repo whitelists for the other configuration; // we know from how the orgRepoConfigs are constructed that // a org blacklist won't intersect it's own repo whitelist pruned := excepts1 . Difference ( c2 . repos ) if excepts2 , ok := c2 . orgExceptions [ org ] ; ok { res . orgExceptions [ org ] = pruned . Intersection ( excepts2 . Difference ( c . repos ) ) } else { res . orgExceptions [ org ] = pruned } } for org , excepts2 := range c2 . orgExceptions { // update any blacklists not previously updated if _ , exists := res . orgExceptions [ org ] ; ! exists { res . orgExceptions [ org ] = excepts2 . Difference ( c . repos ) } } // we need to prune out repos in the whitelists which are // covered by an org already; we know from above that no // org blacklist in the result will contain a repo whitelist for _ , repo := range c . repos . Union ( c2 . repos ) . UnsortedList ( ) { parts := strings . SplitN ( repo , " " , 2 ) if len ( parts ) != 2 { logrus . Warnf ( " " , repo ) continue } if _ , exists := res . orgExceptions [ parts [ 0 ] ] ; ! exists { res . repos . Insert ( repo ) } } return res }
// union returns a new orgRepoConfig that represents the set union of the
// repos specified by the receiver and the parameter orgRepoConfigs
union returns a new orgRepoConfig that represents the set union of the repos specified by the receiver and the parameter orgRepoConfigs