[DRE-commits] [gem2deb] 01/01: Gem2Deb::Metadata: workaround git usage in gemspecs
Antonio Terceiro
terceiro at moszumanska.debian.org
Tue Mar 8 07:44:46 UTC 2016
This is an automated email from the git hooks/post-receive script.
terceiro pushed a commit to branch master
in repository gem2deb.
commit c0ecb012f4788ba451117753c61f7a75ff0a288c
Author: Antonio Terceiro <terceiro at debian.org>
Date: Tue Mar 8 10:45:00 2016 +0700
Gem2Deb::Metadata: workaround git usage in gemspecs
---
debian/changelog | 10 ++++++++++
debian/control | 1 +
lib/gem2deb/metadata.rb | 25 +++++++++++++++++++++++++
test/unit/metadata_test.rb | 44 ++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 80 insertions(+)
diff --git a/debian/changelog b/debian/changelog
index ede1581..1ff8994 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,13 @@
+gem2deb (0.30) UNRELEASED; urgency=medium
+
+ * Gem2Deb::Metadata: workaround git usage in gemspecs. The fact that Debian
+ source packages are *not* git repositories makes it necessary to patch
+ upstream gemspec to drop usage of `git ls-files` in several packages. This
+ change makes gem2deb try to override that with sane defaults for a Debian
+ package.
+
+ -- Antonio Terceiro <terceiro at debian.org> Tue, 08 Mar 2016 10:24:48 +0700
+
gem2deb (0.29) unstable; urgency=medium
* gem2tgz:
diff --git a/debian/control b/debian/control
index 1bcc9d1..ae1c9c7 100644
--- a/debian/control
+++ b/debian/control
@@ -12,6 +12,7 @@ Build-Depends: dctrl-tools <!nocheck>,
debhelper (>= 9.20141010),
devscripts <!nocheck>,
dpkg-dev (>= 1.17.14),
+ git,
lintian <!nocheck>,
python3-debian <!nocheck>,
rake <!nocheck>,
diff --git a/lib/gem2deb/metadata.rb b/lib/gem2deb/metadata.rb
index 0b45681..451c1fd 100644
--- a/lib/gem2deb/metadata.rb
+++ b/lib/gem2deb/metadata.rb
@@ -15,6 +15,7 @@
require 'rubygems'
require 'rubygems/specification'
+require 'tempfile'
require 'time'
require 'yaml'
@@ -108,6 +109,9 @@ module Gem2Deb
gemspec_files = Dir.glob('*.gemspec')
if gemspec_files.size == 1
@gemspec = Gem::Specification.load(gemspec_files.first)
+ if @gemspec.nil?
+ @gemspec = load_modified_gemspec(gemspec_files.first)
+ end
else
unless gemspec_files.empty?
raise "More than one .gemspec file in this directory: #{gemspec_files.join(', ')}"
@@ -116,6 +120,27 @@ module Gem2Deb
end
end
+ GIT_USAGE_MODIFIERS = {
+ /\.files\s*=\s*`[^`]*git\s+ls-files[^`]*`.*/ => '.files = (Dir["**/*"] - Dir["debian/**/*"]).select { |f| !File.directory?(f) }',
+ /\.test_files\s*=\s*`[^`]*git\s+ls-files[^`]*`.*/ => '.test_files = []',
+ /(\w+)\.executables\s*=\s*`[^`]*git\s+ls-files[^`]*`.*/ => '\1.executables = Dir[\1.bindir + "/*"]',
+ }
+
+ def load_modified_gemspec(original_gemspec_path)
+ gemspec_text = File.read(original_gemspec_path)
+
+ modified_gemspec = Tempfile.new('gemspec')
+ GIT_USAGE_MODIFIERS.each do |find,replacement|
+ gemspec_text.gsub!(find, replacement)
+ end
+
+ File.open(modified_gemspec.path, 'w') do |f|
+ f.puts(gemspec_text)
+ end
+
+ Gem::Specification.load(modified_gemspec.path)
+ end
+
def set_gemspec_date
if @gemspec && File.exist?('debian/changelog')
@gemspec.date = Time.parse(`dpkg-parsechangelog -SDate`.strip)
diff --git a/test/unit/metadata_test.rb b/test/unit/metadata_test.rb
index 7f51489..b75a7da 100644
--- a/test/unit/metadata_test.rb
+++ b/test/unit/metadata_test.rb
@@ -168,5 +168,49 @@ class MetaDataTest < Gem2DebTestCase
end
end
+ context 'when upstream abuses git in gemspecs' do
+
+ should 'workaround git usage' do
+ # create
+ dir = File.join(tmpdir, 'gitabuser')
+ FileUtils.mkdir_p(dir)
+ Dir.chdir dir do
+ run_command 'git init'
+ File.open('gitabuser.gemspec', 'w') do |f|
+ f.puts($GIT_ABUSER_GEMSPEC)
+ end
+ FileUtils.mkdir 'lib'
+ File.open('lib/gitabuser.rb', 'w') do |f|
+ f.puts 'module GitAbuser; end'
+ end
+ run_command 'git add .'
+ run_command 'git commit -m "there you go"'
+ end
+
+ @metadata = self.class.silently { Gem2Deb::Metadata.new(dir) }
+ assert_not_nil @metadata.gemspec
+ assert_equal ['gitabuser.gemspec', 'lib/gitabuser.rb'], @metadata.gemspec.files
+ end
+
+ end
+
end
+$GIT_ABUSER_GEMSPEC = <<EOF
+Gem::Specification.new do |s|
+ s.name = "gitabuser"
+ s.version = "1"
+ s.platform = Gem::Platform::RUBY
+ s.authors = ["Antonio Terceiro"]
+ s.email = ["terceiro at debian.org"]
+ s.homepage = ""
+ s.summary = %q{Sample gem that }
+ s.description = %q{This gem is used to test the case where dh-make-ruby is called on a directory}
+
+ s.rubyforge_project = "simplegit"
+ s.files = `/unexisting/git ls-files`.split
+ s.executables = `/unexisting/git ls-files`.split.select { |f| File.executable?(f) }
+ s.test_files = `/unexisting/git ls-files`.split.select { |f| f = ~ /^(test|spec|features)/ }
+ s.require_paths = ["lib"]
+end
+EOF
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-ruby-extras/gem2deb.git
More information about the Pkg-ruby-extras-commits
mailing list