summaryrefslogtreecommitdiffstats
path: root/tasks/svn.rake
blob: ae9426edeed4cdce08af34304951f9f1caeb86ad (plain)
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
# -*- coding: UTF-8 -*-
#
if HAVE_SVN

unless PROJ.svn.root
    info = %x/svn info ./
    m = %r/^Repository Root:\s+(.*)$/.match(info)
    PROJ.svn.root = (m.nil? ? '' : m[1])
end
PROJ.svn.root = File.join(PROJ.svn.root, PROJ.svn.path) unless PROJ.svn.path.empty?

namespace :svn do

    # A prerequisites task that all other tasks depend upon
    task :prereqs

    desc 'Show tags from the SVN repository'
    task :show_tags => 'svn:prereqs' do |t|
        tags = %x/svn list #{File.join(PROJ.svn.root, PROJ.svn.tags)}/
        tags.gsub!(%r/\/$/, '')
        tags = tags.split("\n").sort {|a,b| b <=> a}
        puts tags
    end

    desc 'Create a new tag in the SVN repository'
    task :create_tag => 'svn:prereqs' do |t|
        v = ENV['VERSION'] or abort 'Must supply VERSION=x.y.z'
        abort "Versions don't match #{v} vs #{PROJ.version}" if v != PROJ.version

        svn = PROJ.svn
        trunk = File.join(svn.root, svn.trunk)
        tag = "%s-%s" % [PROJ.name, PROJ.version]
        tag = File.join(svn.root, svn.tags, tag)
        msg = "Creating tag for #{PROJ.name} version #{PROJ.version}"

        puts "Creating SVN tag '#{tag}'"
        unless system "svn cp -m '#{msg}' #{trunk} #{tag}"
            abort "Tag creation failed" 
        end
    end

end  # namespace :svn

task 'gem:release' => 'svn:create_tag'

end  # if PROJ.svn.path

# EOF