diff --git a/main.go b/main.go index e3cc5a9..59c5a26 100644 --- a/main.go +++ b/main.go @@ -32,125 +32,30 @@ func main() { func upload(c *cli.Context) error { directory := c.Args().First() + + fmt.Println(strings.Join(getAllManifests(directory), ", ")) + // TODO, actually upload, don't just print names + return nil +} + +func getAllManifests(directory string) []string { matchingFiles := make([]string, 0) for _, glob := range manifestGlobs() { - globPattern := []string{directory, "**", glob} - pathGlob := strings.Join(globPattern, "/") - files := getManifestMatches(pathGlob) + pathGlob := fmt.Sprintf("%s/**/%s", directory, glob) + files := getManifestGlobMatches(pathGlob) if len(files) > 0 { matchingFiles = append(matchingFiles, files...) } } - - fmt.Println(strings.Join(matchingFiles, ", ")) - return nil + return matchingFiles } -func getManifestMatches(glob string) []string { +func getManifestGlobMatches(glob string) []string { files, err := doublestar.Glob(glob) if err != nil { log.Fatal(err) } return files } - -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 -} diff --git a/main_test.go b/main_test.go new file mode 100644 index 0000000..5e4e008 --- /dev/null +++ b/main_test.go @@ -0,0 +1,31 @@ +package main + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestGetManifestGlobMatches(t *testing.T) { + //assert getManifestMatches gets all requirements.txt + expected := []string{ + "test/fixtures/subdir/requirements.txt", + "test/fixtures/a/b/c/d/e/f/g/requirements.txt", + } + got := getManifestGlobMatches("test/**/requirements.txt") + + assert.Equal(t, expected, got, "they should be equal") +} + +func TestGetAllManifests(t *testing.T) { + all := []string{ + "test/fixtures/yarn.lock", + "test/fixtures/Gemfile", + "test/fixtures/subdir/requirements.txt", + "test/fixtures/a/b/c/d/e/f/g/requirements.txt", + } + got := getAllManifests("test/") + + assert.Equal(t, all, got, "they should match") + +} diff --git a/manifests.go b/manifests.go new file mode 100644 index 0000000..929e62b --- /dev/null +++ b/manifests.go @@ -0,0 +1,106 @@ +package main + +/* + 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 +} diff --git a/test/fixtures/notamanifest b/test/fixtures/notamanifest new file mode 100644 index 0000000..e69de29