Imported Upstream version 2.3.3
[scm/test.git] / config / extension.go
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 }