crank 1.2

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.
Files changed (2) hide show
  1. data/bin/crank +136 -0
  2. metadata +51 -0
@@ -0,0 +1,136 @@
1
+ #!/usr/bin/env ruby
2
+ begin
3
+ require "rubygems"
4
+ require "rscm"
5
+ rescue LoadError => le
6
+ STDOUT.puts "RubyGEMS and the RSCM gem is required"
7
+ end
8
+ require 'erb'
9
+ require 'optparse'
10
+ require "yaml"
11
+
12
+ module RSCM
13
+ class Revisions
14
+ #add some sort options to RSCM
15
+ def sort_desc
16
+ @revisions.sort!{|r1,r2| r2.time<=>r1.time}
17
+ end
18
+ def sort_asc
19
+ @revisions.sort!{|r1,r2| r1.time<=>r2.time}
20
+ end
21
+ end
22
+ end
23
+
24
+ OPTIONS = {}
25
+ OPTIONS[:revision] = 0
26
+ OPTIONS[:run] = true
27
+
28
+ opts = OptionParser.new do |opts|
29
+ opts.on("-s", "--scm=svn", "Which SCM to use (svn,cvs,starteam,perforce).") do |s|
30
+ OPTIONS[:scm] = s if s != nil
31
+ end
32
+
33
+ opts.on("-l","--url=somerepourl", "The repository URL. (svn://, http://, file:///)") do |l|
34
+ OPTIONS[:repo] = l if l != nil
35
+ end
36
+
37
+ opts.on("-x", "--path=/trunk/core","An internal path to the repository.") do |x|
38
+ OPTIONS[:path] = x if x != nil
39
+ end
40
+
41
+ opts.on("-u", "--username=developername","Username for the repository.") do |t|
42
+ OPTIONS[:username] = t if t != nil
43
+ end
44
+
45
+ opts.on("-p", "--password=asd82kd92", "Password for the repository.") do |p|
46
+ OPTIONS[:password] = p if p != nil
47
+ end
48
+
49
+ opts.on("-r", "--revision=400", "A revision to start from.") do |w|
50
+ if w == "HEAD" || w == "PREV" || w == "BASE"
51
+ OPTIONS[:revision] = w
52
+ else
53
+ OPTIONS[:revision] = Number(w) if w != nil
54
+ end
55
+ end
56
+
57
+ opts.on("-d", "--diff", "Show a diff for each file.") do |d|
58
+ OPTIONS[:diff] = true if d != nil
59
+ end
60
+
61
+ opts.on("-t","--template=mytemplate.*","An ERB template file to parse.") do |t|
62
+ OPTIONS[:template_file] = t if t != nil
63
+ end
64
+
65
+ opts.on("-o", "--out=myfile.*", "Output file (html,xhtml,htm,rss,feed,xml,atom).") do |f|
66
+ type = f.split('.').last
67
+ OPTIONS[:type] = type
68
+ OPTIONS[:output_file] = f if f != nil
69
+ end
70
+
71
+ #help, toggle server starting
72
+ opts.on_tail("-h", "--help", "Show this usage statement.") do |h|
73
+ puts opts
74
+ OPTIONS[:run] = false
75
+ end
76
+ end
77
+
78
+ begin
79
+ opts.parse!(ARGV)
80
+ rescue Exception => e
81
+ puts e, "", opts
82
+ exit
83
+ end
84
+
85
+ begin
86
+ if OPTIONS[:run]
87
+
88
+ #check required args
89
+ if !OPTIONS[:repo] || !OPTIONS[:scm] || !OPTIONS[:template_file] || !OPTIONS[:output_file]
90
+ STDOUT.puts "You must supply --url,--scm,--template and --out. Run 'crank -h' for help"
91
+ exit(0)
92
+ end
93
+
94
+ case OPTIONS[:scm].downcase
95
+ when "svn":
96
+ repo = RSCM::Subversion.new(OPTIONS[:repo])
97
+ when "cvs"
98
+ repo = RSCM::CVS.new(OPTIONS[:repo])
99
+ when "starteam"
100
+ repo = RSCM::StarTeam.new(OPTIONS[:repo])
101
+ when "perforce"
102
+ repo = RSCM::Perforce.new(OPTIONS[:repo])
103
+ end
104
+
105
+ if !OPTIONS[:username].nil? then repo.username = OPTIONS[:username] end
106
+ if !OPTIONS[:password].nil? then repo.password = OPTIONS[:password] end
107
+ if !OPTIONS[:path].nil? then repo.path = OPTIONS[:path] end
108
+
109
+ revisions = repo.revisions(Time.now, {:from_identifier => OPTIONS[:revision]})
110
+ revisions.sort_desc #sort descending
111
+ options = OPTIONS
112
+
113
+ #get template content
114
+ template_content = ''
115
+ File.open(OPTIONS[:template_file], "r") do |f|
116
+ while line = f.gets
117
+ template_content << line
118
+ end
119
+ end
120
+
121
+ #ERB the template
122
+ #available vars in the ERB template::
123
+ # options
124
+ # repo
125
+ # revisions
126
+ e = ERB.new(template_content, 0, "%<>")
127
+ result = e.result(self.send("binding"))
128
+
129
+ #write output
130
+ File.open(OPTIONS[:output_file],"w") do |f|
131
+ f.puts result
132
+ end
133
+ end
134
+ rescue Exception => e
135
+ STDOUT.puts e.message
136
+ end
metadata ADDED
@@ -0,0 +1,51 @@
1
+ --- !ruby/object:Gem::Specification
2
+ rubygems_version: 0.9.0
3
+ specification_version: 1
4
+ name: crank
5
+ version: !ruby/object:Gem::Version
6
+ version: "1.2"
7
+ date: 2007-07-22 00:00:00 -04:00
8
+ summary: "RSS, HTML and Email output from SVN repository logs with Ruby"
9
+ require_paths:
10
+ - lib
11
+ email: aaron@rubyamf.org
12
+ homepage: http://www.rubysvn2rss.com
13
+ rubyforge_project:
14
+ description:
15
+ autorequire:
16
+ default_executable: crank
17
+ bindir: bin
18
+ has_rdoc: false
19
+ required_ruby_version: !ruby/object:Gem::Version::Requirement
20
+ requirements:
21
+ -
22
+ - ">"
23
+ - !ruby/object:Gem::Version
24
+ version: 0.0.0
25
+ version:
26
+ platform: ruby
27
+ signing_key:
28
+ cert_chain:
29
+ post_install_message:
30
+ authors:
31
+ - Aaron Smith
32
+ files:
33
+ - bin/crank
34
+ test_files: []
35
+ rdoc_options: []
36
+ extra_rdoc_files: []
37
+ executables:
38
+ - crank
39
+ extensions: []
40
+ requirements: []
41
+ dependencies:
42
+ - !ruby/object:Gem::Dependency
43
+ name: rscm
44
+ version_requirement:
45
+ version_requirements: !ruby/object:Gem::Version::Requirement
46
+ requirements:
47
+ -
48
+ - ">="
49
+ - !ruby/object:Gem::Version
50
+ version: "0.5"
51
+ version: