summaryrefslogtreecommitdiffstats
path: root/tasks/svn.rake
diff options
context:
space:
mode:
Diffstat (limited to 'tasks/svn.rake')
-rw-r--r--tasks/svn.rake48
1 files changed, 48 insertions, 0 deletions
diff --git a/tasks/svn.rake b/tasks/svn.rake
new file mode 100644
index 0000000..ae9426e
--- /dev/null
+++ b/tasks/svn.rake
@@ -0,0 +1,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