Skip to content

Commit

Permalink
Gemspec no longer depends on git.
Browse files Browse the repository at this point in the history
The CI works by pulling down tarballs of Vagrant, and the gemspecs
depending on `git ls-files` were making it not work.
  • Loading branch information
mitchellh committed Dec 1, 2012
1 parent 6309a04 commit ee713a0
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 3 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ Vagrantfile
.vagrant

# Bundler/Rubygems
*.gem
.bundle
pkg/*
tags
Expand Down
38 changes: 35 additions & 3 deletions vagrant.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,44 @@ Gem::Specification.new do |s|
s.add_development_dependency "contest", ">= 0.1.2"
s.add_development_dependency "minitest", "~> 2.5.1"
s.add_development_dependency "mocha"
#s.add_development_dependency "sys-proctable", "~> 0.9.0"
# This has problems on Windows, we need to find a better way:
# s.add_development_dependency "sys-proctable", "~> 0.9.0"
s.add_development_dependency "rspec-core", "~> 2.11.0"
s.add_development_dependency "rspec-expectations", "~> 2.11.0"
s.add_development_dependency "rspec-mocks", "~> 2.11.0"

s.files = `git ls-files`.split("\n")
s.executables = `git ls-files`.split("\n").map{|f| f[/^bin\/(.*)/, 1]}.compact
# The following block of code determines the files that should be included
# in the gem. It does this by reading all the files in the directory where
# this gemspec is, and parsing out the ignored files from the gitignore.
# Note that the entire gitignore(5) syntax is not supported, specifically
# the "!" syntax, but it should mostly work correctly.
root_path = File.expand_path("../", __FILE__)
all_files = Dir.chdir(root_path) { Dir.glob("**/{*,.*}") }
all_files.reject! { |file| [".", ".."].include?(File.basename(file)) }
gitignore_path = File.join(root_path, ".gitignore")
gitignore = File.readlines(gitignore_path)
gitignore.map! { |line| line.chomp.strip }
gitignore.reject! { |line| line.empty? || line =~ /^(#|!)/ }

unignored_files = all_files.reject do |file|
# Ignore any directories, the gemspec only cares about files
next true if File.directory?(file)

# Ignore any paths that match anything in the gitignore. We do
# two tests here:
#
# - First, test to see if the entire path matches the gitignore.
# - Second, match if the basename does, this makes it so that things
# like '.DS_Store' will match sub-directories too (same behavior
# as git).
#
gitignore.any? do |ignore|
File.fnmatch(ignore, file, File::FNM_PATHNAME) ||
File.fnmatch(ignore, File.basename(file), File::FNM_PATHNAME)
end
end

s.files = unignored_files
s.executables = unignored_files.map { |f| f[/^bin\/(.*)/, 1] }.compact
s.require_path = 'lib'
end

0 comments on commit ee713a0

Please sign in to comment.