Skip to content

Commit

Permalink
Merge pull request #224 from Sija/remove-obsolete-projectfile-support
Browse files Browse the repository at this point in the history
Remove support for obsolete Projectfile
  • Loading branch information
ysbaddaden committed Sep 6, 2018
2 parents 0c9ac57 + 7b6e384 commit bfc06ef
Show file tree
Hide file tree
Showing 8 changed files with 13 additions and 158 deletions.
8 changes: 1 addition & 7 deletions src/resolvers/git.cr
Expand Up @@ -39,13 +39,7 @@ module Shards
if file_exists?(refs, SPEC_FILENAME)
capture("git show #{refs}:#{SPEC_FILENAME}")
else
if file_exists?(refs, "Projectfile")
contents = capture("git show #{refs}:Projectfile")
dependencies = parse_legacy_projectfile_to_yaml(contents)
end

version = version_at(refs) || DEFAULT_VERSION
"name: #{dependency.name}\nversion: #{version}\n#{dependencies}"
raise Error.new("Missing \"#{refs}:#{SPEC_FILENAME}\" for #{dependency.name.inspect}")
end
end

Expand Down
9 changes: 1 addition & 8 deletions src/resolvers/path.cr
Expand Up @@ -12,14 +12,7 @@ module Shards
if File.exists?(spec_path)
File.read(spec_path)
else
projectfile_path = File.join(local_path, "Projectfile")

if File.exists?(projectfile_path)
contents = File.read(projectfile_path)
dependencies = parse_legacy_projectfile_to_yaml(contents)
end

"name: #{dependency.name}\nversion: #{DEFAULT_VERSION}\n#{dependencies}"
raise Error.new("Missing #{SPEC_FILENAME.inspect} for #{dependency.name.inspect}")
end
end

Expand Down
35 changes: 1 addition & 34 deletions src/resolvers/resolver.cr
Expand Up @@ -6,9 +6,6 @@ require "../script"

module Shards
abstract class Resolver
PROJECTFILE_GITHUB_RE = /github\s+"(.+?\/(.+?))"(.*)/
PROJECTFILE_GITHUB_BRANCH_RE = /"(.+?)"/

getter dependency : Dependency

def initialize(@dependency, @update_cache = true)
Expand All @@ -24,8 +21,7 @@ module Shards
path = File.join(install_path, SPEC_FILENAME)
return Spec.from_file(path) if File.exists?(path)

# TODO: raise instead of generating fake spec once shards is widely adopted
Spec.from_yaml("name: #{dependency.name}\nversion: #{DEFAULT_VERSION}\n")
raise Error.new("Missing #{SPEC_FILENAME.inspect} for #{dependency.name.inspect}")
end

def installed?
Expand All @@ -52,35 +48,6 @@ module Shards
Shards.logger.debug "rm -rf '#{Helpers::Path.escape(install_path)}'"
FileUtils.rm_rf(install_path)
end

protected def parse_legacy_projectfile_to_yaml(contents)
dependencies = parse_dependencies_from_projectfile(contents)
.map do |d|
if d.has_key?("branch")
" #{d["name"]}:\n github: #{d["github"]}\n branch: #{d["branch"]}"
else
" #{d["name"]}:\n github: #{d["github"]}"
end
end

if dependencies.any?
"dependencies:\n#{dependencies.join("\n")}"
end
end

protected def parse_dependencies_from_projectfile(contents)
dependencies = Array(Hash(String, String)).new

contents.scan(PROJECTFILE_GITHUB_RE) do |m|
dependency = { "name" => m[2], "github" => m[1] }
if m[3]? && (mm = m[3].match(PROJECTFILE_GITHUB_BRANCH_RE))
dependency["branch"] = mm[1]
end
dependencies << dependency
end

dependencies
end
end

@@resolver_classes = {} of String => Resolver.class
Expand Down
63 changes: 2 additions & 61 deletions test/git_resolver_test.cr
Expand Up @@ -6,16 +6,12 @@ module Shards
create_git_repository "empty"
create_git_commit "empty", "initial release"

create_git_repository "legacy"
create_git_release "legacy", "1.0.0", shard: false

create_git_repository "library", "0.0.1", "0.1.0", "0.1.1", "0.1.2"
create_git_release "library", "0.2.0", shard: "name: library\nversion: 0.2.0\nauthors:\n - julien <julien@portalier.com>"
end

def test_available_versions
assert_equal ["HEAD"], resolver("empty").available_versions
assert_equal ["1.0.0"], resolver("legacy").available_versions
assert_equal ["0.0.1", "0.1.0", "0.1.1", "0.1.2", "0.2.0"], resolver("library").available_versions

refs = git_commits("library")
Expand All @@ -26,15 +22,14 @@ module Shards
end

def test_read_spec
assert_equal "name: empty\nversion: #{DEFAULT_VERSION}\n", resolver("empty").read_spec
assert_equal "name: legacy\nversion: 1.0.0\n", resolver("legacy").read_spec
assert_raises { resolver("empty").read_spec }
assert_equal "name: library\nversion: 0.2.0\nauthors:\n - julien <julien@portalier.com>", resolver("library").read_spec
assert_equal "name: library\nversion: 0.1.1\n", resolver("library").read_spec("0.1.1")
assert_equal "name: library\nversion: 0.1.1\n", resolver("library").read_spec("0.1.1")
end

def test_install
library, legacy = resolver("library"), resolver("legacy")
library = resolver("library")

library.install("0.1.2")
assert File.exists?(install_path("library", "src/library.cr"))
Expand All @@ -44,40 +39,6 @@ module Shards

library.install
assert_equal "0.2.0", library.installed_spec.not_nil!.version

legacy.install
assert File.exists?(install_path("legacy", "src/legacy.cr"))
assert File.exists?(install_path("legacy", "shard.yml"))

legacy.install("1.0.0")
assert File.exists?(install_path("legacy", "src/legacy.cr"))
assert File.exists?(install_path("legacy", "shard.yml"))
assert_equal "1.0.0", legacy.installed_spec.not_nil!.version
end

def test_install_generates_missing_shard_yml
create_file "empty", "Projectfile",
"deps do\n github \"user/repo\"\n github \"other/book\", branch: \"unstable\"\nend"
create_git_commit "empty"

empty = resolver("empty")

empty.install # HEAD
assert File.exists?(install_path("empty", "src/empty.cr"))
assert File.exists?(install_path("empty", "shard.yml"))

spec = empty.installed_spec.not_nil!
assert_equal DEFAULT_VERSION, spec.version
assert_equal 2, spec.dependencies.size
repo, book = spec.dependencies

assert_equal "repo", repo.name
assert_equal "user/repo", repo["github"]
refute repo["branch"]?

assert_equal "book", book.name
assert_equal "other/book", book["github"]
assert_equal "unstable", book["branch"]
end

def test_install_refs
Expand All @@ -86,26 +47,6 @@ module Shards
skip "TODO: install tag (whatever the version)"
end

def test_parses_dependencies_from_legacy_projectfile
create_file "legacy", "Projectfile",
"deps do\n github \"user/project\"\n github \"other/library\", branch: \"1-0-stable\"\nend"
create_git_release "legacy", "1.0.1", shard: false

spec = resolver("legacy").spec("1.0.1")

assert_equal "1.0.1", spec.version
assert_equal 2, spec.dependencies.size

project, library = spec.dependencies
assert_equal "project", project.name
assert_equal "user/project", project["github"]
refute project["branch"]?

assert_equal "library", library.name
assert_equal "other/library", library["github"]
assert_equal "1-0-stable", library["branch"]
end

private def resolver(name, config = {} of String => String)
config = config.merge({ "git" => git_url(name) })
dependency = Dependency.new(name, config)
Expand Down
12 changes: 1 addition & 11 deletions test/integration/install_test.cr
Expand Up @@ -16,7 +16,7 @@ class InstallCommandTest < Minitest::Test
assert_installed "pg", "0.2.1"

# it installed the path dependency
assert_installed "foo"
assert_installed "foo", "0.1.0"

# it installed development dependencies (recursively, except their
# development dependencies)
Expand Down Expand Up @@ -49,16 +49,6 @@ class InstallCommandTest < Minitest::Test
end
end

def test_falls_back_to_install_and_lock_current_head
commit = git_commits(:empty).first

with_shard({ dependencies: { empty: nil } }, nil) do
run "shards install"
assert_installed "empty", commit
assert_locked "empty", commit
end
end

def test_installs_dependencies_at_locked_version
metadata = {
dependencies: { web: "1.0.0" },
Expand Down
2 changes: 1 addition & 1 deletion test/integration_helper.cr
Expand Up @@ -55,7 +55,7 @@ class Minitest::Test
create_file "fails", "Makefile", "all:\n\ttest -n ''\n"
create_git_release "fails", "0.1.0", "name: fails\nversion: 0.1.0\nscripts:\n postinstall: make\n"

create_path_repository "foo"
create_path_repository "foo", "0.1.0"

create_path_repository "binary"
create_shard "binary", "name: binary\nversion: 0.1.0\nexecutables:\n - foobar\n - baz\n"
Expand Down
13 changes: 6 additions & 7 deletions test/manager_test.cr
Expand Up @@ -12,19 +12,18 @@ module Shards

MockResolver.register_spec("minitest", version: "0.1.1")

MockResolver.register_spec("legacy", version: "1.0.0", dependencies: %w(base:~>0.1.0))
MockResolver.register_spec("collection", version: "1.0.0", dependencies: %w(base:>0.2.0))

MockResolver.register_spec("library", version: "0.0.1")
MockResolver.register_spec("library", version: "0.1.0")
MockResolver.register_spec("library", version: "0.1.1")
MockResolver.register_spec("library", version: "0.1.2")
MockResolver.register_spec("library", version: "0.2.0", dependencies: %w(legacy minitest))
MockResolver.register_spec("library", version: "0.2.0", dependencies: %w(minitest))

MockResolver.register_spec("failing", version: "0.1.0", dependencies: %w(legacy collection))
MockResolver.register_spec("failing", version: "0.1.0", dependencies: %w(collection))

MockResolver.register_spec("webmock", version: "0.1.0")
MockResolver.register_spec("framework", dependencies: %w(base), development: %w(legacy))
MockResolver.register_spec("framework", dependencies: %w(base))
MockResolver.register_spec("ide", dependencies: %w(framework), development: %w(minitest))
end

Expand Down Expand Up @@ -53,8 +52,8 @@ module Shards
}
})
manager.resolve
assert_equal 4, manager.packages.size
assert_equal %w(base legacy library minitest), manager.packages.map(&.name).sort
assert_equal 2, manager.packages.size
assert_equal %w(library minitest), manager.packages.map(&.name).sort
end

def test_resolves_version_requirements
Expand All @@ -81,7 +80,7 @@ module Shards
}
})
ex = assert_raises(Shards::Conflict) { manager.resolve }
assert_equal "Error resolving base (~>0.1.0, >0.2.0)", ex.message
assert_equal "Error resolving base (>0.2.0)", ex.message
end

def test_resolves_development_dependencies
Expand Down
29 changes: 0 additions & 29 deletions test/path_resolver_test.cr
Expand Up @@ -3,50 +3,24 @@ require "./test_helper"
module Shards
class PathResolverTest < Minitest::Test
def setup
create_path_repository "legacy"
create_path_repository "library", "1.2.3"
end

def test_available_versions
assert_equal [DEFAULT_VERSION], resolver("legacy").available_versions
assert_equal ["1.2.3"], resolver("library").available_versions
end

def test_read_spec
assert_equal "name: legacy\nversion: #{DEFAULT_VERSION}\n", resolver("legacy").read_spec
assert_equal "name: library\nversion: 1.2.3\n", resolver("library").read_spec
end

def test_parses_dependencies_from_legacy_projectfile
create_file "legacy", "Projectfile",
"deps do\n github \"user/project\"\n github \"other/library\", branch: \"1-0-stable\"\nend"

spec = resolver("legacy").spec
project, library = spec.dependencies

assert_equal "project", project.name
assert_equal "user/project", project["github"]
assert_nil project["branch"]?

assert_equal "library", library.name
assert_equal "other/library", library["github"]
assert_equal "1-0-stable", library["branch"]
end

def test_install
resolver("library").tap do |library|
library.install
assert File.exists?(install_path("library", "src/library.cr"))
assert File.exists?(install_path("library", "shard.yml"))
assert_equal "1.2.3", library.installed_spec.not_nil!.version
end

resolver("legacy").tap do |legacy|
legacy.install
assert File.exists?(install_path("legacy", "src/legacy.cr"))
refute File.exists?(install_path("legacy", "shard.yml"))
assert_equal DEFAULT_VERSION, legacy.installed_spec.not_nil!.version
end
end

def test_install_fails_when_path_doesnt_exist
Expand All @@ -64,9 +38,6 @@ module Shards

def test_installed_when_target_is_incorrect_link
resolver("library").tap do |resolver|
File.symlink(git_path("legacy"), resolver.install_path)
refute resolver.installed?

resolver.install
assert resolver.installed?
end
Expand Down

0 comments on commit bfc06ef

Please sign in to comment.