github.com/git-lfs/git-lfs@v2.5.2+incompatible/config/extension.go (about)

     1  package config
     2  
     3  import (
     4  	"fmt"
     5  	"sort"
     6  )
     7  
     8  // An Extension describes how to manipulate files during smudge and clean.
     9  // Extensions are parsed from the Git config.
    10  type Extension struct {
    11  	Name     string
    12  	Clean    string
    13  	Smudge   string
    14  	Priority int
    15  }
    16  
    17  // SortExtensions sorts a map of extensions in ascending order by Priority
    18  func SortExtensions(m map[string]Extension) ([]Extension, error) {
    19  	pMap := make(map[int]Extension)
    20  	priorities := make([]int, 0, len(m))
    21  	for n, ext := range m {
    22  		p := ext.Priority
    23  		if _, exist := pMap[p]; exist {
    24  			err := fmt.Errorf("duplicate priority %d on %s", p, n)
    25  			return nil, err
    26  		}
    27  		pMap[p] = ext
    28  		priorities = append(priorities, p)
    29  	}
    30  
    31  	sort.Ints(priorities)
    32  
    33  	result := make([]Extension, len(priorities))
    34  	for i, p := range priorities {
    35  		result[i] = pMap[p]
    36  	}
    37  
    38  	return result, nil
    39  }