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