svn_tools 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/bin/svntools ADDED
@@ -0,0 +1,145 @@
1
+ require 'fileutils'
2
+ require 'optparse'
3
+ require 'optparse/time'
4
+ require 'ostruct'
5
+ require 'pp'
6
+ require 'find'
7
+
8
+ class SvnTools
9
+
10
+ def self.available_apps
11
+ [:lock, :unlock, :show_branches_and_revisions, :export_branches]
12
+ end
13
+
14
+ def self.lock(options)
15
+ lock_or_unlock("lock", options)
16
+ end
17
+
18
+ def self.unlock(options)
19
+ lock_or_unlock("unlock", options)
20
+ end
21
+
22
+ def self.show_branches_and_revisions(options)
23
+ branches, svn_base_url = get_branches
24
+ branches.each do |branch|
25
+ puts "Branch #{branch[0]} revision #{branch[1]} url #{svn_base_url}/branches/#{branch[0]}"
26
+ end
27
+ end
28
+
29
+ def self.export_branches(options)
30
+ branch_names_list = options.branch_names
31
+ base_export_directory = options.base_export_directory
32
+ unless File.exists?(base_export_directory)
33
+ `mkdir -p #{base_export_directory}`
34
+ end
35
+ branches_to_export = branch_names_list.split(',').collect {|branch_name| branch_name.strip.downcase }
36
+ branches, svn_base_url = get_branches
37
+ branches.each do |branch_info|
38
+ branch = branch_info[0]
39
+ if branch_names_list == '' or branches_to_export.include?(branch)
40
+ export_directory = "#{base_export_directory}/#{branch}"
41
+ branch_url = "#{svn_base_url}/branches/#{branch}"
42
+ svn_cmd = "svn export #{branch_url} #{export_directory}"
43
+ puts svn_cmd
44
+ result = `#{svn_cmd}`
45
+ if options.show_output == 'true'
46
+ puts result
47
+ end
48
+ end
49
+ end
50
+ end
51
+
52
+ private
53
+
54
+ def self.lock_or_unlock(com, options)
55
+ Find.find(FileUtils.pwd) do |f|
56
+ if FileTest.directory?(f) and f =~ /\.svn/
57
+ Find.prune
58
+ else
59
+ if FileTest.file?(f)
60
+ puts `svn #{com} #{f}`
61
+ end
62
+ end
63
+ end
64
+ end
65
+
66
+
67
+ def self.get_branches
68
+ svn_base_url = `svn info | grep URL`.gsub(/URL\:/,'').gsub(/\/trunk/,'').strip
69
+ all_revs = []
70
+ all_branches = `svn list #{svn_base_url}/branches`.split("\n")
71
+ all_branches.each do |branch|
72
+ unless branch =~ /test/
73
+ branch.strip!
74
+ branch = branch[0..-2]
75
+ all_lines = `svn log --stop-on-copy #{svn_base_url}/branches/#{branch}`.split("\n").reverse
76
+ all_lines.pop
77
+ rev_line = nil
78
+ all_lines.each do |one_line|
79
+ if one_line =~ /^r[\d]+\s/
80
+ rev_line = one_line
81
+ revision = one_line[1..one_line.index(/\s/)].to_i
82
+ all_revs << [branch, revision]
83
+ break
84
+ end
85
+ end
86
+ end
87
+ end
88
+ return [all_revs, svn_base_url]
89
+ end
90
+
91
+ end
92
+
93
+ class SvnToolsError < Exception
94
+
95
+ def initialize
96
+ err = %{
97
+ Available tools are:
98
+ #{SvnTools.available_apps.join("\n")}
99
+
100
+ To use any of these tools simply type:
101
+ svntools <toolname> # example: svntools lock
102
+
103
+ export_branches (options):
104
+ -v # This will set the show_output flag to true.
105
+ -n # This will allow you to set a list of branch names.
106
+ -e # This will set the base export directory.
107
+
108
+ }
109
+ puts err
110
+ end
111
+
112
+ end
113
+
114
+ app = ARGV[0]
115
+
116
+ raise SvnToolsError.new if app.nil?
117
+
118
+ options = OpenStruct.new
119
+ options.show_output = false
120
+ options.branch_names = ''
121
+ options.base_export_directory = '../branches'
122
+
123
+ opts = OptionParser.new do |opts|
124
+
125
+ opts.on("-v") do
126
+ options.show_output = true
127
+ end
128
+
129
+ opts.on("-n [BRANCH_NAMES]") do |v|
130
+ options.branch_names = v
131
+ end
132
+
133
+ opts.on("-e [BASE_EXPORT_DIRECTORY]") do |v|
134
+ options.base_export_directory = v
135
+ end
136
+
137
+ end
138
+
139
+ opts.parse!(ARGV)
140
+
141
+ begin
142
+ SvnTools.send(app, options)
143
+ rescue => e
144
+ raise SvnToolsError.new
145
+ end
data/init.rb ADDED
@@ -0,0 +1 @@
1
+ #require 'svn_tools'
data/lib/svn_tools.rb ADDED
@@ -0,0 +1,115 @@
1
+ class SvnTools
2
+
3
+ def self.lock_or_unlock(com)
4
+ Find.find(FileUtils.pwd) do |f|
5
+ if FileTest.directory?(f) and f =~ /\.svn/
6
+ Find.prune
7
+ else
8
+ if FileTest.file?(f)
9
+ puts `svn #{com} #{f}`
10
+ end
11
+ end
12
+ end
13
+ end
14
+
15
+ end
16
+
17
+ # class SubversionRakeUtils
18
+ #
19
+ # def self.get_branches
20
+ # svn_base_url = `svn info | grep URL`.gsub(/URL\:/,'').gsub(/\/trunk/,'').strip
21
+ # all_revs = []
22
+ # all_branches = `svn list #{svn_base_url}/branches`.split("\n")
23
+ # all_branches.each do |branch|
24
+ # unless branch =~ /test/
25
+ # branch.strip!
26
+ # branch = branch[0..-2]
27
+ # all_lines = `svn log --stop-on-copy #{svn_base_url}/branches/#{branch}`.split("\n").reverse
28
+ # all_lines.pop
29
+ # rev_line = nil
30
+ # all_lines.each do |one_line|
31
+ # if one_line =~ /^r[\d]+\s/
32
+ # rev_line = one_line
33
+ # revision = one_line[1..one_line.index(/\s/)].to_i
34
+ # all_revs << [branch, revision]
35
+ # break
36
+ # end
37
+ # end
38
+ # end
39
+ # end
40
+ # return [all_revs, svn_base_url]
41
+ # end
42
+ #
43
+ # end
44
+ #
45
+ # require 'find'
46
+ # require 'fileutils'
47
+ # namespace :h do
48
+ #
49
+ # namespace :subversion do
50
+ #
51
+ # desc "Show branches and associated revisions"
52
+ # task :show_branches_and_revisions => :environment do |t|
53
+ #
54
+ # branches, svn_base_url = SubversionRakeUtils.get_branches
55
+ # branches.each do |branch|
56
+ # puts "Branch #{branch[0]} revision #{branch[1]} url #{svn_base_url}/branches/#{branch[0]}"
57
+ # end
58
+ #
59
+ # end
60
+ #
61
+ #
62
+ # desc "Export branches"
63
+ # task :export_branches => :environment do |t|
64
+ # show_output = ENV['SHOW_OUTPUT'] || 'false'
65
+ # branch_names_list = ENV['BRANCH_NAMES'] || ''
66
+ # base_export_directory = ENV['BASE_EXPORT_DIRECTORY'] || '../branches'
67
+ # unless File.exists?(base_export_directory)
68
+ # `mkdir -p #{base_export_directory}`
69
+ # end
70
+ # branches_to_export = branch_names_list.split(',').collect {|branch_name| branch_name.strip.downcase }
71
+ # branches, svn_base_url = SubversionRakeUtils.get_branches
72
+ # branches.each do |branch_info|
73
+ # branch = branch_info[0]
74
+ # if branch_names_list == '' or branches_to_export.include?(branch)
75
+ # export_directory = "#{base_export_directory}/#{branch}"
76
+ # branch_url = "#{svn_base_url}/branches/#{branch}"
77
+ # svn_cmd = "svn export #{branch_url} #{export_directory}"
78
+ # puts svn_cmd
79
+ # result = `#{svn_cmd}`
80
+ # if show_output == 'true'
81
+ # puts result
82
+ # end
83
+ # end
84
+ # end
85
+ #
86
+ # end
87
+ #
88
+ # task :lock do |t|
89
+ # Find.find(FileUtils.pwd) do |f|
90
+ # if FileTest.directory?(f) and f =~ /\.svn/
91
+ # Find.prune
92
+ # else
93
+ # if FileTest.file?(f)
94
+ # puts `svn lock #{f}`
95
+ # end
96
+ # end
97
+ # end
98
+ # end
99
+ #
100
+ # task :unlock do |t|
101
+ # Find.find(FileUtils.pwd) do |f|
102
+ # if FileTest.directory?(f) and f =~ /\.svn/
103
+ # Find.prune
104
+ # else
105
+ # if FileTest.file?(f)
106
+ # puts `svn unlock #{f}`
107
+ # end
108
+ # end
109
+ # end
110
+ # end
111
+ #
112
+ # end
113
+ #
114
+ # end
115
+ #
@@ -0,0 +1,5 @@
1
+ --- !ruby/object:RubyForgeConfig
2
+ gem_name: svn_tools
3
+ package: svn_tools
4
+ project: magrathea
5
+ version: 1.0.0
metadata ADDED
@@ -0,0 +1,52 @@
1
+ --- !ruby/object:Gem::Specification
2
+ rubygems_version: 0.9.2
3
+ specification_version: 1
4
+ name: svn_tools
5
+ version: !ruby/object:Gem::Version
6
+ version: 1.0.0
7
+ date: 2007-11-07 00:00:00 -05:00
8
+ summary: svn_tools
9
+ require_paths:
10
+ - lib
11
+ - lib
12
+ - lib
13
+ - lib/tasks
14
+ email:
15
+ homepage:
16
+ rubyforge_project: magrathea
17
+ description: "svn_tools was developed by: markbates"
18
+ autorequire:
19
+ - svn_tools
20
+ default_executable:
21
+ bindir: bin
22
+ has_rdoc: false
23
+ required_ruby_version: !ruby/object:Gem::Version::Requirement
24
+ requirements:
25
+ - - ">"
26
+ - !ruby/object:Gem::Version
27
+ version: 0.0.0
28
+ version:
29
+ platform: ruby
30
+ signing_key:
31
+ cert_chain:
32
+ post_install_message:
33
+ authors:
34
+ - markbates
35
+ files:
36
+ - init.rb
37
+ - lib/svn_tools.rb
38
+ - lib/tasks/rubyforge_config.yml
39
+ test_files: []
40
+
41
+ rdoc_options: []
42
+
43
+ extra_rdoc_files: []
44
+
45
+ executables:
46
+ - svntools
47
+ extensions: []
48
+
49
+ requirements: []
50
+
51
+ dependencies: []
52
+