1package config 2 3import ( 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. 10type 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 18func 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} 40