rubygems-tasks 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,37 @@
1
+ ### 0.2.1 / 2012-04-29
2
+
3
+ * Overrode the `FileUtils.fu_output_message` to call
4
+ {Gem::Tasks::Printing#debug}.
5
+ * Added `@api semipublic` tags to mark the semi-public API.
6
+ * Fixed a spelling error.
7
+
8
+ #### console
9
+
10
+ * Infer the primary file to require from the gemspec name.
11
+ * No longer run `bundle console`, since it is not the same as running
12
+ `bundle exec irb -Ilib -rfoo/bar`.
13
+
14
+ #### scm:status
15
+
16
+ * Will display the human-readable status, if the repository is dirty.
17
+ * Hooks into the `validate` task.
18
+
19
+ #### scm:push
20
+
21
+ * Depends on the `validate` task.
22
+
23
+ #### scm:tag
24
+
25
+ * Depends on the `validate` task.
26
+
27
+ #### build:*
28
+
29
+ * All `build:*` tasks now depend on the `validate` task.
30
+
31
+ #### push
32
+
33
+ * Depends on the `validate` task.
34
+
1
35
  ### 0.2.0 / 2012-04-27
2
36
 
3
37
  * Removed `Gem::Tasks::Task.task_name`.
data/README.md CHANGED
@@ -68,7 +68,7 @@ Specifying an alternate Ruby Console to run:
68
68
  Enable pushing gems to an in-house [RubyGems][2] server:
69
69
 
70
70
  Gem::Tasks.new do |tasks|
71
- tasks.push.host = 'gems.company.come'
71
+ tasks.push.host = 'gems.company.com'
72
72
  end
73
73
 
74
74
  Disable the `push` task:
@@ -85,9 +85,9 @@ Enable Checksums and PGP signatures for built packages:
85
85
 
86
86
  Selectively defining tasks:
87
87
 
88
+ Gem::Build::Tar.new
88
89
  Gem::SCM::Status.new
89
90
  Gem::SCM::Tag.new(:format => 'REL-%s')
90
- Gem::Build::Tar.new
91
91
  Gem::Sign::Checksum.new
92
92
  Gem::Console.new
93
93
 
@@ -1,5 +1,5 @@
1
1
  name: rubygems-tasks
2
- version: 0.2.0
2
+ version: 0.2.1
3
3
  summary: Rake tasks for managing and releasing Ruby Gems.
4
4
  description:
5
5
  Agnostic and unobtrusive Rake tasks for managing and releasing Ruby Gems.
@@ -46,10 +46,12 @@ module Gem
46
46
  # @param [Gem::Specification] gemspec
47
47
  # The gemspec to build the `.gem` package from.
48
48
  #
49
+ # @api semipublic
50
+ #
49
51
  def build(path,gemspec)
50
52
  builder = ::Gem::Builder.new(gemspec)
51
53
 
52
- FileUtils.mv builder.build, Project::PKG_DIR
54
+ mv builder.build, Project::PKG_DIR
53
55
  end
54
56
 
55
57
  end
@@ -39,6 +39,8 @@ module Gem
39
39
  # @param [Gem::Specification] gemspec
40
40
  # The gemspec to generate the archive from.
41
41
  #
42
+ # @api semipublic
43
+ #
42
44
  def build(path,gemspec)
43
45
  run 'tar', 'czf', path, *gemspec.files
44
46
  end
@@ -33,6 +33,8 @@ module Gem
33
33
  def build_task(name,extname=name)
34
34
  directory Project::PKG_DIR
35
35
 
36
+ task :validate
37
+
36
38
  @project.builds.each do |build,packages|
37
39
  namespace :build do
38
40
  namespace name do
@@ -40,7 +42,7 @@ module Gem
40
42
  path = packages[extname]
41
43
 
42
44
  # define file tasks, so the packages are not needless re-built
43
- file(path => [Project::PKG_DIR, *gemspec.files]) do
45
+ file(path => [:validate, Project::PKG_DIR, *gemspec.files]) do
44
46
  status "Building #{File.basename(path)} ..."
45
47
 
46
48
  build(path,gemspec)
@@ -37,6 +37,8 @@ module Gem
37
37
  # @param [Gem::Specification] gemspec
38
38
  # The gemspec to build the archive from.
39
39
  #
40
+ # @api semipublic
41
+ #
40
42
  def build(path,gemspec)
41
43
  run 'zip', '-q', path, *gemspec.files
42
44
  end
@@ -64,11 +64,13 @@ module Gem
64
64
  # @return [Array<String>]
65
65
  # The arguments for the console command.
66
66
  #
67
+ # @api semipublic
68
+ #
67
69
  def console(name=nil)
68
70
  gemspec = @project.gemspec(name)
69
71
 
70
72
  require_paths = gemspec.require_paths
71
- require_file = gemspec.files.find { |path| path.start_with?('lib/') }
73
+ require_file = gemspec.name.gsub('-',File::SEPARATOR)
72
74
 
73
75
  arguments = [@command]
74
76
 
@@ -79,18 +81,14 @@ module Gem
79
81
  arguments.push('-rrubygems') if RUBY_VERSION < '1.9'
80
82
 
81
83
  # add an -r option to require the library
82
- arguments.push('-r' + require_file.sub('lib/','')) if require_file
84
+ arguments.push('-r' + require_file)
83
85
 
84
86
  # push on additional options
85
87
  arguments.push(*@options)
86
88
 
87
89
  if @project.bundler?
88
- # use `bundle console` unless were were using custom command/options
89
- if (@command == DEFAULT_CONSOLE && @options.empty?)
90
- arguments = ['bundle', 'console']
91
- else
92
- arguments.unshift('bundle', 'exec')
93
- end
90
+ # run under `bundle exec`
91
+ arguments.unshift('bundle', 'exec')
94
92
  end
95
93
 
96
94
  return run(*arguments)
@@ -49,7 +49,9 @@ module Gem
49
49
  # The path to the `.gem` file.
50
50
  #
51
51
  # @return [Boolean]
52
- # Specifies whether `gem install` was successfull or not.
52
+ # Specifies whether `gem install` was successful or not.
53
+ #
54
+ # @api semipublic
53
55
  #
54
56
  def install(path)
55
57
  run 'gem', 'install', '-q', path
@@ -77,6 +77,20 @@ module Gem
77
77
  $stderr.puts "#{ERROR_PREFIX} #{message}"
78
78
  end
79
79
 
80
+ private
81
+
82
+ #
83
+ # The FileUtils output method.
84
+ #
85
+ # @param [String] message
86
+ # The FileUtils message to print.
87
+ #
88
+ # @since 0.2.1
89
+ #
90
+ def fu_output_message(message)
91
+ debug(message)
92
+ end
93
+
80
94
  end
81
95
  end
82
96
  end
@@ -32,11 +32,13 @@ module Gem
32
32
  # Defines the `push` task.
33
33
  #
34
34
  def define
35
+ task :validate
36
+
35
37
  namespace :push do
36
38
  @project.builds.each do |build,packages|
37
39
  path = packages[:gem]
38
40
 
39
- task build => path do
41
+ task build => [:validate, path] do
40
42
  if @host
41
43
  status "Pushing #{File.basename(path)} to #{@host} ..."
42
44
  else
@@ -61,7 +63,9 @@ module Gem
61
63
  # The path to the `.gem` file.
62
64
  #
63
65
  # @return [Boolean]
64
- # Specifies whether `gem push` was successfull or not.
66
+ # Specifies whether `gem push` was successful or not.
67
+ #
68
+ # @api semipublic
65
69
  #
66
70
  def push(path)
67
71
  arguments = ['gem', 'push', path]
@@ -25,8 +25,10 @@ module Gem
25
25
  # Defines the `scm:push` task.
26
26
  #
27
27
  def define
28
+ task :validate
29
+
28
30
  namespace :scm do
29
- task :push do
31
+ task :push => :validate do
30
32
  status "Pushing commits ..."
31
33
 
32
34
  unless push!
@@ -42,6 +44,8 @@ module Gem
42
44
  # @return [Boolean]
43
45
  # Specifies whether the commits were successfully pushed.
44
46
  #
47
+ # @api semipublic
48
+ #
45
49
  def push!
46
50
  case @project.scm
47
51
  when :git
@@ -27,41 +27,50 @@ module Gem
27
27
  def define
28
28
  namespace :scm do
29
29
  task :status do
30
- status = self.status
31
-
32
- unless status.strip.empty?
30
+ if dirty?
33
31
  error "Project has uncommitted changes!"
34
- puts status
32
+
33
+ status
35
34
  abort
36
35
  end
37
36
  end
38
37
  end
39
38
 
40
- # do not allow tagging releases when the repository is dirty
41
- task 'scm:tag' => 'scm:status'
42
-
43
- # do not allow pushing commits when the repository is dirty
44
- task 'scm:push' => 'scm:status'
39
+ # alias the `validate` task to scm:status
40
+ task :validate => 'scm:status'
41
+ end
45
42
 
46
- # do not allow building packages when the repository is dirty
47
- task :build => 'scm:status'
43
+ #
44
+ # Checks the status of the project repository.
45
+ #
46
+ # @return [Boolean]
47
+ # Specifies whether the repository is dirty.
48
+ #
49
+ # @api semipublic
50
+ #
51
+ # @since 0.2.1
52
+ #
53
+ def dirty?
54
+ status = case @project.scm
55
+ when :git then `git status --porcelain --untracked-files=no`
56
+ when :hg then `hg status --quiet`
57
+ when :svn then `svn status --quiet`
58
+ else ''
59
+ end
48
60
 
49
- # do not allow pushing gems when the repository is dirty
50
- task :push => 'scm:status'
61
+ return !status.chomp.empty?
51
62
  end
52
63
 
53
64
  #
54
- # Checks the status of the project repository.
65
+ # Displays the status of the project repository.
55
66
  #
56
- # @return [String]
57
- # The status of the project repository.
67
+ # @api semipublic
58
68
  #
59
69
  def status
60
70
  case @project.scm
61
- when :git then `git status --short --untracked-files=no`
62
- when :hg then `hg status --quiet`
63
- when :svn then `svn status --quiet`
64
- else ''
71
+ when :git then run 'git', 'status', '--untracked-files=no'
72
+ when :hg then run 'hg', 'status', '--quiet'
73
+ when :svn then run 'svn', 'status', '--quiet'
65
74
  end
66
75
  end
67
76
 
@@ -53,8 +53,10 @@ module Gem
53
53
  # Defines the `scm:tag` task.
54
54
  #
55
55
  def define
56
+ task :validate
57
+
56
58
  namespace :scm do
57
- task :tag, [:name] do |t,args|
59
+ task :tag, [:name] => :validate do |t,args|
58
60
  tag = if args.name
59
61
  args.name
60
62
  else
@@ -82,6 +84,8 @@ module Gem
82
84
  # @raise [TypeError]
83
85
  # {#format} was not a String or a Proc.
84
86
  #
87
+ # @api semipublic
88
+ #
85
89
  def version_tag(version)
86
90
  case @format
87
91
  when String
@@ -106,6 +110,8 @@ module Gem
106
110
  # * Git: `git config user.signingkey`
107
111
  # * Mercurial: `hg showconfig extensions hgext gpg`
108
112
  #
113
+ # @api semipublic
114
+ #
109
115
  # @since 0.2.0
110
116
  #
111
117
  def sign?
@@ -132,6 +138,8 @@ module Gem
132
138
  # @return [Boolean]
133
139
  # Specifies whether the tag was successfully created.
134
140
  #
141
+ # @api semipublic
142
+ #
135
143
  def tag!(name)
136
144
  message = "Tagging #{name}"
137
145
 
@@ -94,6 +94,8 @@ module Gem
94
94
  # @param [String] path
95
95
  # The path to the package.
96
96
  #
97
+ # @api semipublic
98
+ #
97
99
  def sign(path)
98
100
  status "Checksums for #{File.basename(path)}:"
99
101
 
@@ -36,6 +36,8 @@ module Gem
36
36
  # @param [String] path
37
37
  # The path to the package.
38
38
  #
39
+ # @api semipublic
40
+ #
39
41
  def sign(path)
40
42
  status "Signing #{File.basename(path)} ..."
41
43
 
@@ -8,9 +8,9 @@ describe Gem::Tasks::Console do
8
8
  include_context "rake"
9
9
 
10
10
  if RUBY_VERSION < '1.9'
11
- let(:default_options) { %w[-Ilib -rrubygems -rrubygems/tasks.rb] }
11
+ let(:default_options) { %w[-Ilib -rrubygems -rrubygems/tasks] }
12
12
  else
13
- let(:default_options) { %w[-Ilib -rrubygems/tasks.rb] }
13
+ let(:default_options) { %w[-Ilib -rrubygems/tasks] }
14
14
  end
15
15
 
16
16
  let(:custom_command) { 'ripl' }
@@ -24,9 +24,11 @@ describe Gem::Tasks::Console do
24
24
  end
25
25
 
26
26
  context "when project.bundler? == true" do
27
- it "should use `bundle console`" do
27
+ it "should use `bundle exec`" do
28
28
  subject.project.stub!(:bundler?).and_return(true)
29
- subject.should_receive(:run).with('bundle', 'console')
29
+ subject.should_receive(:run).with(
30
+ 'bundle', 'exec', 'irb', *default_options
31
+ )
30
32
 
31
33
  subject.console
32
34
  end
@@ -110,7 +110,7 @@ describe Gem::Tasks::Project do
110
110
  subject { rubygems_multi_project }
111
111
 
112
112
  it "should group builds by gemspec name" do
113
- subject.builds.keys.should == subject.gemspecs.keys
113
+ subject.builds.keys.should =~ subject.gemspecs.keys
114
114
  end
115
115
 
116
116
  it "should map a package format to a pkg/ path" do
@@ -0,0 +1,50 @@
1
+ require 'spec_helper'
2
+ require 'rake_context'
3
+
4
+ require 'rubygems/tasks/scm/status'
5
+
6
+ describe Gem::Tasks::SCM::Status do
7
+ describe "#status" do
8
+ context "git" do
9
+ include_context "rake"
10
+
11
+ it "should run `git status --untracked-files=no`" do
12
+ subject.project.stub!(:scm).and_return(:git)
13
+
14
+ subject.should_receive(:run).with(
15
+ 'git', 'status', '--untracked-files=no'
16
+ )
17
+
18
+ subject.status
19
+ end
20
+ end
21
+
22
+ context "hg" do
23
+ include_context "rake"
24
+
25
+ it "should run `hg status --quiet`" do
26
+ subject.project.stub!(:scm).and_return(:hg)
27
+
28
+ subject.should_receive(:run).with(
29
+ 'hg', 'status', '--quiet'
30
+ )
31
+
32
+ subject.status
33
+ end
34
+ end
35
+
36
+ context "svn" do
37
+ include_context "rake"
38
+
39
+ it "should run `svn status --quiet`" do
40
+ subject.project.stub!(:scm).and_return(:svn)
41
+
42
+ subject.should_receive(:run).with(
43
+ 'svn', 'status', '--quiet'
44
+ )
45
+
46
+ subject.status
47
+ end
48
+ end
49
+ end
50
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubygems-tasks
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-28 00:00:00.000000000 Z
12
+ date: 2012-04-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
@@ -90,6 +90,7 @@ files:
90
90
  - spec/push_spec.rb
91
91
  - spec/rake_context.rb
92
92
  - spec/scm/push_spec.rb
93
+ - spec/scm/status_spec.rb
93
94
  - spec/scm/tag_spec.rb
94
95
  - spec/spec_helper.rb
95
96
  - spec/tasks_spec.rb
@@ -123,5 +124,6 @@ test_files:
123
124
  - spec/project_spec.rb
124
125
  - spec/push_spec.rb
125
126
  - spec/scm/push_spec.rb
127
+ - spec/scm/status_spec.rb
126
128
  - spec/scm/tag_spec.rb
127
129
  - spec/tasks_spec.rb