fpm 0.2.4 → 0.2.5

Sign up to get free protection for your applications and to get access to all the features.
data/bin/fpm CHANGED
@@ -11,6 +11,7 @@ require "fpm"
11
11
 
12
12
  def main(args)
13
13
  settings = OpenStruct.new
14
+ settings.exclude = []
14
15
 
15
16
  opts = OptionParser.new do |opts|
16
17
  opts.banner = "Usage: #{$0} [options]"
@@ -68,6 +69,16 @@ def main(args)
68
69
  "A path to prefix files with when building the target package. This may not be necessary for all source types. For example, the 'gem' type will prefix with your gem directory (gem env | grep -A1 PATHS:)") do |prefix|
69
70
  settings.prefix = prefix
70
71
  end
72
+
73
+ opts.on("-e", "--edit", "Edit the specfile before building") do
74
+ settings.edit = true
75
+ end
76
+
77
+ opts.on("-x PATTERN", "--exclude PATTERN",
78
+ "Exclude paths matching pattern (according to tar --exclude)") do |pattern|
79
+ settings.exclude << pattern
80
+ end # -x / --exclude
81
+
71
82
  end # OptionParser
72
83
 
73
84
  opts.parse!(args)
data/lib/fpm/builder.rb CHANGED
@@ -35,9 +35,12 @@ class FPM::Builder
35
35
  :version => settings.version,
36
36
  :name => settings.package_name,
37
37
  :prefix => settings.prefix,
38
- :suffix => settings.suffix
38
+ :suffix => settings.suffix,
39
+ :exclude => settings.exclude
39
40
  )
40
41
 
42
+ @edit = !!settings.edit
43
+
41
44
  @paths = paths
42
45
  @package = package_class_for(settings.package_type).new(@source)
43
46
  # Append dependencies given from settings (-d flag for fpm)
@@ -67,6 +70,7 @@ class FPM::Builder
67
70
 
68
71
  generate_md5sums
69
72
  generate_specfile
73
+ edit_specfile if @edit
70
74
  end
71
75
 
72
76
  ::Dir.chdir(builddir) do
@@ -129,6 +133,16 @@ class FPM::Builder
129
133
  end
130
134
  end
131
135
 
136
+ private
137
+ def edit_specfile
138
+ editor = ENV['FPM_EDITOR'] || ENV['EDITOR'] || 'vi'
139
+ system("#{editor} '#{package.specfile(builddir)}'")
140
+ unless File.size? package.specfile(builddir)
141
+ puts "Empty specfile. Aborting."
142
+ exit 1
143
+ end
144
+ end
145
+
132
146
  private
133
147
  def generate_md5sums
134
148
  md5sums = checksum(paths)
data/lib/fpm/source.rb CHANGED
@@ -83,9 +83,21 @@ class FPM::Source
83
83
  path = File.dirname(path)
84
84
  end
85
85
  end # paths.each
86
- system(*["tar", "-C", chdir, "--owner=root", "--group=root",
87
- "-cf", output, "--no-recursion", *dirs]) if dirs.any?
88
- system(*["tar", "-C", chdir,
89
- "--owner=root", "--group=root", "-rf", output, *paths])
86
+
87
+ excludes = self[:exclude].map { |e| ["--exclude", e] }.flatten
88
+ # TODO(sissel): To properly implement excludes as regexps, we
89
+ # will need to find files ourselves. That may be more work
90
+ # than it is worth. For now, rely on tar's --exclude.
91
+ dir_tar = ["tar", "-C", chdir, "--owner=root", "--group=root" ] \
92
+ + excludes \
93
+ + ["-cf", output, "--no-recursion" ] \
94
+ + dirs
95
+ system(*dir_tar) if dirs.any?
96
+
97
+ files_tar = [ "tar", "-C", chdir ] \
98
+ + excludes \
99
+ + [ "--owner=root", "--group=root", "-rf", output ] \
100
+ + paths
101
+ system(*files_tar)
90
102
  end # def tar
91
103
  end
@@ -10,15 +10,21 @@ class FPM::Source::Dir < FPM::Source
10
10
  if self[:prefix]
11
11
  self[:prefix] = self[:prefix][1..-1] if self[:prefix] =~ /^\//
12
12
  # Prefix all files with a path.
13
- FileUtils.mkdir_p(self[:prefix])
14
- paths.each do |path|
13
+ ::FileUtils.mkdir_p(self[:prefix])
14
+ @paths.each do |path|
15
15
  # Trim @root (--chdir)
16
16
  path = path[@root.size .. -1] if path.start_with?(@root)
17
17
 
18
18
  # Copy to self[:prefix] (aka --prefix)
19
- dest = "#{builddir}/tarbuild/#{self[:prefix]}/#{path}"
20
- FileUtils.mkdir_p(dest)
19
+ if File.directory?(path)
20
+ dest = "#{builddir}/tarbuild/#{self[:prefix]}/#{path}"
21
+ else
22
+ dest = "#{builddir}/tarbuild/#{self[:prefix]}/#{File.dirname(path)}"
23
+ end
24
+
25
+ ::FileUtils.mkdir_p(dest)
21
26
  rsync = ["rsync", "-a", path, dest]
27
+ p rsync
22
28
  system(*rsync)
23
29
 
24
30
  # FileUtils.cp_r is pretty silly about how it copies files in some
@@ -26,10 +32,13 @@ class FPM::Source::Dir < FPM::Source
26
32
  # Use rsync instead..
27
33
  #FileUtils.cp_r(path, dest)
28
34
  end
35
+
36
+ # Prefix paths with 'prefix' if necessary.
37
+ if self[:prefix]
38
+ @paths = @paths.collect { |p| File.join("/", self[:prefix], p) }
39
+ end
40
+
29
41
  ::Dir.chdir("#{builddir}/tarbuild") do
30
- puts "TAR"
31
- puts tar_path
32
- puts "#{builddir}/tarbuild"
33
42
  system("ls #{builddir}/tarbuild")
34
43
  tar(tar_path, ".")
35
44
  end
@@ -39,5 +48,5 @@ class FPM::Source::Dir < FPM::Source
39
48
 
40
49
  # TODO(sissel): Make a helper method.
41
50
  system(*["gzip", "-f", tar_path])
42
- end
43
- end
51
+ end # def make_tarball!
52
+ end # class FPM::Source::Dir
@@ -12,12 +12,17 @@ class FPM::Target::Rpm < FPM::Package
12
12
  "--define", "buildroot #{Dir.pwd}/BUILD",
13
13
  "--define", "_topdir #{Dir.pwd}",
14
14
  "--define", "_sourcedir #{Dir.pwd}",
15
- "--define", "_rpmdir #{params[:output]}",
15
+ "--define", "_rpmdir #{Dir.pwd}/RPMS",
16
16
  "#{name}.spec"]
17
17
  ret = system(*args)
18
18
  if !ret
19
19
  raise "rpmbuild failed"
20
20
  end
21
21
 
22
+ Dir["#{Dir.pwd}/RPMS/**/*.rpm"].each do |path|
23
+ # This should only output one rpm, should we verify this?
24
+ system("mv", path, params[:output])
25
+ end
26
+
22
27
  end
23
28
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fpm
3
3
  version: !ruby/object:Gem::Version
4
- hash: 31
4
+ hash: 29
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- - 4
10
- version: 0.2.4
9
+ - 5
10
+ version: 0.2.5
11
11
  platform: ruby
12
12
  authors:
13
13
  - Jordan Sissel
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-02-07 00:00:00 -08:00
18
+ date: 2011-03-01 00:00:00 -08:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -88,7 +88,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
88
88
  requirements: []
89
89
 
90
90
  rubyforge_project:
91
- rubygems_version: 1.4.2
91
+ rubygems_version: 1.5.0
92
92
  signing_key:
93
93
  specification_version: 3
94
94
  summary: fpm - package building and mangling