package main import ( "fmt" "log" "os" "github.com/bmatcuk/doublestar" ) /* When adding new manifest types, for new package managers add a new entry here. */ func manifestGlobs() []string { globs := make([]string, 0) // Hackage globs = append(globs, "*.cabal") // npm globs = append(globs, "package.json") globs = append(globs, "package-lock.json") globs = append(globs, "npm-shrinkwrap.json") globs = append(globs, "yarn.lock") // Maven globs = append(globs, "pom.xml") globs = append(globs, "ivy.xml") globs = append(globs, "build.gradle") // RubyGems globs = append(globs, "Gemfile") globs = append(globs, "Gemfile.lock") globs = append(globs, "gems.rb") globs = append(globs, "gems.locked") globs = append(globs, "*.gemspec") // Packagist globs = append(globs, "composer.json") globs = append(globs, "composer.lock") // PyPi globs = append(globs, "setup.py") globs = append(globs, "req*.txt") globs = append(globs, "req*.pip") globs = append(globs, "requirements/*.txt") globs = append(globs, "requirements/*.pip") globs = append(globs, "Pipfile") globs = append(globs, "Pipfile.lock") // Nuget globs = append(globs, "packages.config") globs = append(globs, "Project.json") globs = append(globs, "Project.lock.json") globs = append(globs, "*.nuspec") globs = append(globs, "paket.lock") globs = append(globs, "*.csproj") // Bower globs = append(globs, "bower.json") // CPAN globs = append(globs, "META.json") globs = append(globs, "META.yml") // CocoaPods globs = append(globs, "Podfile") globs = append(globs, "Podfile.lock") globs = append(globs, "*.podspec") // Clojars globs = append(globs, "project.clj") // Meteor globs = append(globs, "versions.json") // CRAN globs = append(globs, "DESCRIPTION") // Cargo globs = append(globs, "Cargo.toml") globs = append(globs, "Cargo.lock") // Hex globs = append(globs, "mix.exs") globs = append(globs, "mix.lock") // Swift globs = append(globs, "Package.swift") // Pub globs = append(globs, "pubspec.yaml") globs = append(globs, "pubspec.lock") // Carthage globs = append(globs, "Cartfile") globs = append(globs, "Cartfile.private") globs = append(globs, "Cartfile.resolved") // Dub globs = append(globs, "dub.json") globs = append(globs, "dub.sdl") // Julia globs = append(globs, "REQUIRE") // Shards globs = append(globs, "shard.yml") globs = append(globs, "shard.lock") // Go globs = append(globs, "glide.yaml") globs = append(globs, "glide.lock") globs = append(globs, "Godeps") globs = append(globs, "Godeps/Godeps.json") globs = append(globs, "vendor/manifest") globs = append(globs, "vendor/vendor.json") globs = append(globs, "Gopkg.toml") globs = append(globs, "Gopkg.lock") // Elm globs = append(globs, "elm-package.json") globs = append(globs, "elm_dependencies.json") globs = append(globs, "elm-stuff/exact-dependencies.json") // Haxelib globs = append(globs, "haxelib.json") // Hackage globs = append(globs, "*.cabal") globs = append(globs, "cabal.config") return globs } func getListOfManifestFilenames(directory string) []string { os.Chdir(directory) matchingFiles := make([]string, 0) for _, glob := range manifestGlobs() { pathGlob := fmt.Sprintf("**/%s", glob) files := getListOfGlobMatches(pathGlob) if len(files) > 0 { matchingFiles = append(matchingFiles, files...) } } return matchingFiles } func getListOfGlobMatches(glob string) []string { files, err := doublestar.Glob(glob) if err != nil { log.Fatal(err) } return files }