jlawler / cabar forked from kstephens/cabar

Cabar

This URL has Read+Write access

jlawler (author)
Sun Jul 12 02:53:27 -0700 2009
commit  cbe4b54f544e48f73f687c062c16b07b44b0e511
tree    857032629079cf2e33aa65c49db3a5104c29f01c
parent  fe55eb51db94c8acb8b619f0b327b6d43d539de4 parent  77631594a94a8e02da566790d6745839930cdd07
cabar / rake_helper.rb
100644 255 lines (196 sloc) 5.346 kb
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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
# For release
"
rake make_manifest
rake update_version
svn status
rake package
rake release VERSION=x.x.x
rake svn_release
rake publish_docs
rake announce
"
 
#################################################################
 
require 'rubygems'
require 'hoe'
 
#################################################################
# Release notes
#
 
def get_release_notes(relfile = "Releases.txt")
 
  release = nil
  notes = [ ]
 
  File.open(relfile) do |f|
    while ! f.eof && line = f.readline
      if md = /^== Release ([\d\.]+)/i.match(line)
        release = md[1]
        notes << line
        break
      end
    end
 
    while ! f.eof && line = f.readline
      if md = /^== Release ([\d\.]+)/i.match(line)
        break
      end
      notes << line
    end
  end
 
  [ release, notes.join('') ]
end
 
#################################################################
 
PKG_NAME = PKG_Name.gsub(/[a-z][A-Z]/) {|x| "#{x[0,1]}_#{x[1,1]}"}.downcase
 
PKG_SVN_ROOT="svn+ssh://rubyforge.org/var/svn/#{PKG_NAME}/#{PKG_NAME}"
 
release, release_notes = get_release_notes
 
hoe = Hoe.new(PKG_Name.downcase, release) do |p|
  p.author = PKG_Author
  p.description = PKG_DESCRIPTION
  p.email = PKG_Email
  p.summary = p.description
  p.changes = release_notes
  p.url = "http://rubyforge.org/projects/#{PKG_NAME}"
  p.remote_rdoc_dir = '.'
  
  p.test_globs = ['test/**/*.rb']
end
 
PKG_VERSION = hoe.version
 
task :test => :test_specs
 
desc "Runs all spec test"
task :test_specs do
  spec_files = Dir["test/**/*.spec"].sort
  unless spec_files.empty?
    ENV['RUBYLIB'] = ($:.dup << 'test/ruby').join(':')
    sh "spec -b -f specdoc #{spec_files.join(' ')}"
  end
end
 
 
#################################################################
# Version file
#
 
def announce(msg='')
  STDERR.puts msg
end
 
PKG_lib_ruby_dir = "lib" unless defined? PKG_lib_ruby_dir
version_rb = "#{PKG_lib_ruby_dir}/#{PKG_NAME}/#{PKG_NAME}_version.rb"
 
task :update_version do
  announce "Updating #{PKG_Name} version to #{PKG_VERSION}: #{version_rb}"
  open(version_rb, "w") do |f|
    f.puts "module #{PKG_Name}"
    f.puts " #{PKG_Name}Version = '#{PKG_VERSION}'"
    f.puts "end"
    f.puts "# DO NOT EDIT"
    f.puts "# This file is auto-generated by build scripts."
    f.puts "# See: rake update_version"
  end
  if ENV['RELTEST']
    announce "Release Task Testing, skipping commiting of new version"
  else
    sh %{svn commit -m "Updated to version #{PKG_VERSION}" #{version_rb} Releases.txt ChangeLog Rakefile Manifest.txt}
  end
end
 
task version_rb => :update_version
 
#################################################################
# SVN
#
 
task :svn_release do
  sh %{svn cp -m 'Release #{PKG_VERSION}' . #{PKG_SVN_ROOT}/release/#{PKG_VERSION}}
end
 
# task :test => :update_version
 
 
# Misc Tasks ---------------------------------------------------------
 
def egrep(pattern)
  Dir['**/*.rb'].each do |fn|
    count = 0
    open(fn) do |f|
      while line = f.gets
count += 1
if line =~ pattern
puts "#{fn}:#{count}:#{line}"
end
      end
    end
  end
end
 
desc "Look for TODO and FIXME tags in the code"
task :todo do
  egrep /#.*(FIXME|TODO|TBD)/
end
 
desc "Look for Debugging print lines"
task :dbg do
  egrep /\bDBG|\bbreakpoint\b/
end
 
desc "List all ruby files"
task :rubyfiles do
  puts Dir['**/*.rb'].reject { |fn| fn =~ /^pkg/ }
  puts Dir['bin/*'].reject { |fn| fn =~ /CVS|.svn|(~$)|(\.rb$)/ }
end
 
PKG_manifest_reject = nil unless defined? PKG_manifest_reject
 
task :make_manifest do
  files = Dir['**/*'].reject { |fn|
      fn == 'email.txt' ||
      ! test(?f, fn) ||
      fn =~ /CVS|.svn|([#~]$)|(\.gem$)|(^pkg\/)|(^doc\/)/ ||
      (PKG_manifest_reject && (fn =~ PKG_manifest_reject))
    }.sort.join("\n") + "\n"
 
  open("Manifest.txt", "w") do |f|
    f.puts files
  end
 
  puts files
end
 
 
 
USER = ENV['USER'] || `id -un`.chomp
HOSTNAME = `hostname`.chomp
 
def p4_pending_cl(name = PKG_NAME)
  `p4 changelists -u '#{USER}' -s pending -c '#{USER}.#{HOSTNAME}' ...`.
  split("\n").
  map do | l |
    l =~ /Change (\d+).* '#{name}: from SVN/
    $1
  end.
  compact.
  first
end
 
def svn_root
  `svn info`.
  split("\n").
  map do | l |
    l =~ /Repository Root: (.*)/
    $1
  end.
  compact.
  first
end
 
task :p4_pending_cl do
  puts p4_pending_cl
end
 
task :svn_root do
  puts svn_root
end
 
desc "p4 edit, svn update, p4 submit"
task :p4_submit do
  m = ENV['m'] || "From #{USER}@#{HOSTNAME}"
  c = ENV['c'] || p4_pending_cl
 
  # Open everything for edit.
  sh "p4 edit ..."
 
  # Get latest Manifest.txt.
  sh "svn update"
 
  # FIXME: Delete any files not in Manifest.txt.
 
  # Add any new files in Manifest.txt.
  sh "xargs p4 add < Manifest.txt"
 
  # Submit any pending changes.
  sh "svn ci -m #{m.inspect}"
 
  # Get the current svn rev.
  m = "#{PKG_NAME}: from SVN #{`svn update`.chomp} of #{svn_root}"
 
  # Revert any unchanged files.
  sh "p4 revert -a ..."
 
  # Move everything to default changelist.
  sh "p4 reopen -c default ..."
 
  # Submit everything under here.
  sh "p4 submit -r -d #{m.inspect} ..."
 
  # Edit everything under here.
  sh "p4 edit ..."
 
  # Reopen in the original changelist.
  if c
    sh "p4 reopen -c #{c} ..."
  end
end
 
 
desc "p4 edit, svn ci"
task :p4_edit_svn_ci do
  m = ENV['m'] || "From #{USER}@#{HOSTNAME}"
  sh "p4 edit ..."
  sh "svn ci -m #{m.inspect}"
  sh "p4 revert -a ..."
end