mirror of
				https://github.com/go-gitea/gitea
				synced 2025-11-03 21:08:25 +00:00 
			
		
		
		
	* Fix validate() function to handle errors in embedded anon structs * Implement webhook branch filter See #2025, #3998.
		
			
				
	
	
		
			83 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package match
 | 
						|
 | 
						|
import "fmt"
 | 
						|
 | 
						|
type AnyOf struct {
 | 
						|
	Matchers Matchers
 | 
						|
}
 | 
						|
 | 
						|
func NewAnyOf(m ...Matcher) AnyOf {
 | 
						|
	return AnyOf{Matchers(m)}
 | 
						|
}
 | 
						|
 | 
						|
func (self *AnyOf) Add(m Matcher) error {
 | 
						|
	self.Matchers = append(self.Matchers, m)
 | 
						|
	return nil
 | 
						|
}
 | 
						|
 | 
						|
func (self AnyOf) Match(s string) bool {
 | 
						|
	for _, m := range self.Matchers {
 | 
						|
		if m.Match(s) {
 | 
						|
			return true
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	return false
 | 
						|
}
 | 
						|
 | 
						|
func (self AnyOf) Index(s string) (int, []int) {
 | 
						|
	index := -1
 | 
						|
 | 
						|
	segments := acquireSegments(len(s))
 | 
						|
	for _, m := range self.Matchers {
 | 
						|
		idx, seg := m.Index(s)
 | 
						|
		if idx == -1 {
 | 
						|
			continue
 | 
						|
		}
 | 
						|
 | 
						|
		if index == -1 || idx < index {
 | 
						|
			index = idx
 | 
						|
			segments = append(segments[:0], seg...)
 | 
						|
			continue
 | 
						|
		}
 | 
						|
 | 
						|
		if idx > index {
 | 
						|
			continue
 | 
						|
		}
 | 
						|
 | 
						|
		// here idx == index
 | 
						|
		segments = appendMerge(segments, seg)
 | 
						|
	}
 | 
						|
 | 
						|
	if index == -1 {
 | 
						|
		releaseSegments(segments)
 | 
						|
		return -1, nil
 | 
						|
	}
 | 
						|
 | 
						|
	return index, segments
 | 
						|
}
 | 
						|
 | 
						|
func (self AnyOf) Len() (l int) {
 | 
						|
	l = -1
 | 
						|
	for _, m := range self.Matchers {
 | 
						|
		ml := m.Len()
 | 
						|
		switch {
 | 
						|
		case l == -1:
 | 
						|
			l = ml
 | 
						|
			continue
 | 
						|
 | 
						|
		case ml == -1:
 | 
						|
			return -1
 | 
						|
 | 
						|
		case l != ml:
 | 
						|
			return -1
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	return
 | 
						|
}
 | 
						|
 | 
						|
func (self AnyOf) String() string {
 | 
						|
	return fmt.Sprintf("<any_of:[%s]>", self.Matchers)
 | 
						|
}
 |