/
validatenuget.go
72 lines (62 loc) · 1.75 KB
/
validatenuget.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package main
import (
"flag"
"fmt"
"log"
"os"
"path/filepath"
"strings"
"github.com/fhalim/validatenuget/dependencymanagement"
)
import linq "github.com/ahmetalpbalkan/go-linq"
func main() {
baseDir := flag.String("dir", ".", "Base directory")
prefixesStr := flag.String("prefixes", "", "Comma separated prefixes of interesting packages")
flag.Parse()
interestingPrefixes := strings.Split(*prefixesStr, ",")
state := dependencymanagement.CreatePackagesState()
processDir(*baseDir, state)
deps := state.ReconcileDependencies()
foundProblems := reportProblems(deps, interestingPrefixes)
if foundProblems {
os.Exit(2)
}
}
func contains(prefixes []string, str string) bool {
matchingPrefix := func(prefix linq.T) (bool, error) {
return strings.HasPrefix(str, prefix.(string)), nil
}
result, _ := linq.From(prefixes).AnyWith(matchingPrefix)
return result
}
func reportProblems(deps map[string]map[string][]string, interestingPrefixes []string) bool {
foundProblems := false
for pkgName, versions := range deps {
if len(versions) > 1 && contains(interestingPrefixes, pkgName) {
foundProblems = true
fmt.Printf("Package %v has %v referenced versions\n", pkgName, len(versions))
for version, projects := range versions {
fmt.Printf("%v:\n", version)
for _, project := range projects {
fmt.Printf("\t%v\n", project)
}
}
}
}
return foundProblems
}
func processError(err error) {
if err != nil {
log.Fatal(err)
os.Exit(1)
}
}
func processDir(dirName string, state dependencymanagement.PackagesState) {
filepath.Walk(dirName, func(path string, item os.FileInfo, err error) error {
name := item.Name()
if item.Mode().IsRegular() && name == "packages.config" {
return state.ProcessPackagesFile(path)
}
return nil
})
}