...

Source file src/github.com/monochromegane/go-gitignore/initial_holder.go

Documentation: github.com/monochromegane/go-gitignore

     1  package gitignore
     2  
     3  import "strings"
     4  
     5  const initials = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ."
     6  
     7  type initialPatternHolder struct {
     8  	patterns      initialPatterns
     9  	otherPatterns *patterns
    10  }
    11  
    12  func newInitialPatternHolder() initialPatternHolder {
    13  	return initialPatternHolder{
    14  		patterns:      initialPatterns{m: map[byte]*patterns{}},
    15  		otherPatterns: &patterns{},
    16  	}
    17  }
    18  
    19  func (h *initialPatternHolder) add(pattern string) {
    20  	trimedPattern := strings.TrimPrefix(pattern, "/")
    21  	if strings.IndexAny(trimedPattern[0:1], initials) != -1 {
    22  		h.patterns.set(trimedPattern[0], newPatternForEqualizedPath(pattern))
    23  	} else {
    24  		h.otherPatterns.add(newPatternForEqualizedPath(pattern))
    25  	}
    26  }
    27  
    28  func (h initialPatternHolder) match(path string, isDir bool) bool {
    29  	if h.patterns.size() == 0 && h.otherPatterns.size() == 0 {
    30  		return false
    31  	}
    32  	if patterns, ok := h.patterns.get(path[0]); ok {
    33  		if patterns.match(path, isDir) {
    34  			return true
    35  		}
    36  	}
    37  	return h.otherPatterns.match(path, isDir)
    38  }
    39  
    40  type initialPatterns struct {
    41  	m map[byte]*patterns
    42  }
    43  
    44  func (p *initialPatterns) set(initial byte, pattern pattern) {
    45  	if ps, ok := p.m[initial]; ok {
    46  		ps.add(pattern)
    47  	} else {
    48  		patterns := &patterns{}
    49  		patterns.add(pattern)
    50  		p.m[initial] = patterns
    51  
    52  	}
    53  }
    54  
    55  func (p initialPatterns) get(initial byte) (*patterns, bool) {
    56  	patterns, ok := p.m[initial]
    57  	return patterns, ok
    58  }
    59  
    60  func (p initialPatterns) size() int {
    61  	return len(p.m)
    62  }
    63  

View as plain text