forked from halostatue-archive/transaction-simple
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Rakefile
123 lines (107 loc) · 3.26 KB
/
Rakefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#! /usr/bin/env rake
#--
# Transaction::Simple
# Simple object transaction support for Ruby
# http://rubyforge.org/projects/trans-simple/
# Version 1.4.0.1
#
# Licensed under a MIT-style licence. See Licence.txt in the main
# distribution for full licensing information.
#
# Copyright (c) 2003 - 2007 Austin Ziegler
#
# $Id$
#++
require 'rubygems'
require 'hoe'
$LOAD_PATH.unshift('lib')
require 'transaction/simple'
TSVER = Transaction::Simple::TRANSACTION_SIMPLE_VERSION
DISTDIR = "transaction-simple-#{TSVER}"
TARFILE = "pkg/#{DISTDIR}.tar.gz"
MANIFEST = File.read("Manifest.txt").split
Hoe.new "transaction-simple", TSVER do |p|
p.rubyforge_name = "trans-simple"
# This is a lie becasue I will continue to use Archive::Tar::Minitar.
p.need_tar = false
# need_zip - Should package create a zipfile? [default: false]
p.author = "Austin Ziegler"
p.email = "austin@rubyforge.org"
p.url = "http://rubyforge.org/projects/trans-simple"
p.summary = "Simple object transaction support for Ruby."
p.changes = p.paragraphs_of("History.txt", 0..1).join("\n\n")
p.description = p.paragraphs_of("Readme.txt", 1..1).join("\n\n")
p.spec_extras[:required_ruby_version] = ">=1.8.2"
p.spec_extras[:extra_rdoc_files] = MANIFEST.grep(/txt$/) -
["Manifest.txt"]
p.clean_globs << "./**/log"
p.extra_deps << [ "archive-tar-minitar", "~>0.5.1" ]
# extra_deps - An array of rubygem dependencies.
# clean_globs - An array of file patterns to delete on clean.
# rdoc_pattern - A regexp to match documentation files against the manifest.
# spec_extras - A hash of extra values to set in the gemspec.
# test_globs - An array of test file patterns [default: test/**/test_*.rb]
# bin_files
# lib_files
# spec
# test_files
end
desc "Build a Transaction::Simple .tar.gz distribution."
task :tar => [ TARFILE ]
file TARFILE => [ :test ] do |t|
require 'archive/tar/minitar'
require 'zlib'
files = MANIFEST.map { |f|
fn = File.join(DISTDIR, f)
tm = File.stat(f).mtime
if File.directory?(f)
{ :name => fn, :mode => 0755, :dir => true, :mtime => tm }
else
mode = if f =~ %r{^bin}
0755
else
0644
end
data = File.read(f)
{ :name => fn, :mode => mode, :data => data, :size => data.size,
:mtime => tm }
end
}
begin
unless File.directory?(File.dirname(t.name))
require 'fileutils'
File.mkdir_p File.dirname(t.name)
end
tf = File.open(t.name, 'wb')
gz = Zlib::GzipWriter.new(tf)
tw = Archive::Tar::Minitar::Writer.new(gz)
files.each do |entry|
if entry[:dir]
tw.mkdir(entry[:name], entry)
else
tw.add_file_simple(entry[:name], entry) { |os|
os.write(entry[:data])
}
end
end
ensure
tw.close if tw
gz.close if gz
end
end
task :package => [ TARFILE ]
task :build_manifest do |t|
require 'find'
paths = []
Find.find(".") do |path|
next if File.directory?(path)
next if path =~ /\.svn/
next if path =~ %r{/research/}
next if path =~ /\.swp$/
next if path =~ /~$/
paths << path.sub(%r{^\./}, '')
end
File.open("Manifest.txt", "w") do |f|
f.puts paths.sort.join("\n")
end
end