bzrwrapper 0.1

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 (3) hide show
  1. data/README +25 -0
  2. data/lib/bzrwrapper.rb +241 -0
  3. metadata +47 -0
data/README ADDED
@@ -0,0 +1,25 @@
1
+ # == Synopsis
2
+ # easy wrapper to get some information out of bazaar-branches
3
+ # wraps: bzr version-info, bzr log --forward
4
+ # processes the 'log' so you can deal with single 'Commits' that make up the log...
5
+ #
6
+ # == Author
7
+ # Rene Paulokat
8
+ #
9
+ # == Copyright
10
+ # Copyright (c) 2007 Rene Paulokat
11
+ #
12
+ # This program is free software; you can redistribute it and/or modify
13
+ # it under the terms of the GNU General Public License as published by
14
+ # the Free Software Foundation; either version 2 of the License, or
15
+ # (at your option) any later version.
16
+ #
17
+ # This program is distributed in the hope that it will be useful,
18
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
19
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20
+ # GNU General Public License for more details.
21
+ #
22
+ # You should have received a copy of the GNU General Public License
23
+ # along with this program; if not, write to the Free Software
24
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
25
+ #
data/lib/bzrwrapper.rb ADDED
@@ -0,0 +1,241 @@
1
+ # BzrWrapper is a simple tool to extract information from
2
+ # bazaar-branches (http://bazaar-vcs.org)
3
+ # it gives u the opportunity to extract log/commits/version-info
4
+ #--
5
+ # Author:: rene paulolat (mailto: rene@so36.net)
6
+ # Copyright:: Copyright (c) 2007 rene paulokat
7
+ # License::
8
+ #
9
+ # This program is free software: you can redistribute it and/or modify
10
+ # it under the terms of the GNU General Public License as published by
11
+ # the Free Software Foundation, either version 3 of the License, or
12
+ # (at your option) any later version.
13
+ #
14
+ # This program is distributed in the hope that it will be useful,
15
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
16
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
+ # GNU General Public License for more details.
18
+ #
19
+ # You should have received a copy of the GNU General Public License
20
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
21
+ #
22
+
23
+ # :include: ./README
24
+
25
+ # == Extract information of bzr-branches
26
+ #
27
+ # pp branch = BzrWrapper::Branch.new('/home/rp/devel/rubzr')
28
+ # ->
29
+ ## <BzrWrapper::Branch:0x2b7b13335ce8
30
+ # @path="/home/rp/devel/rubzr",
31
+ # @version_info=
32
+ # #<BzrWrapper::Info:0x2b7b133352c0
33
+ # @branch_nick=" rubzr",
34
+ # @date=Wed Aug 22 11:22:03 +0200 2007,
35
+ # @revision_id=" rp@dwarf-20070822092203-xzink973ch9e5d07",
36
+ # @revno=" 6">>
37
+ #
38
+ # * iterate over the commits
39
+ # branch.log.each_entry { |e| puts e.time.to_s }
40
+ # -> Tue Aug 21 16:58:29 +0200 2007
41
+ # -> Tue Aug 21 16:57:22 +0200 2007
42
+ # * get the latest 2 commits
43
+ # BzrWrapper::Branch.new('/home/rp/devel/rubzr').last_commits(2) { |c| puts c.message + " / " + c.time.to_s }
44
+ # -> added Info / Tue Aug 21 16:57:22 +0200 2007
45
+ # -> log-parsing... / Tue Aug 21 21:05:42 +0200 2007
46
+ #
47
+ # == Classes
48
+ # * BzrWrapper::Branch
49
+ # * BzrWrapper::Log
50
+ # * BzrWrapper::Info
51
+ # * BzrWrapper::Commit
52
+ #
53
+ module BzrWrapper
54
+ require 'time'
55
+
56
+ # represents bazaar-branch
57
+ #
58
+ class Branch
59
+
60
+ # filepath to the bazaar-branch
61
+ attr_reader :path
62
+ # returns BzrWrapper::Info
63
+ attr_reader :version_info
64
+
65
+ # initiate instance with path to existent
66
+ # bazaar-branch
67
+ # :call-seq:
68
+ # BzrWrapper::Branch.new('/your/path/to/branch') -> BzrWrapper::Branch
69
+ #
70
+ def initialize(path)
71
+ unless File.exist?(path) && File.readable?(path)
72
+ raise ArgumentError, "no such file / not readable: #{path}"
73
+ end
74
+ begin
75
+ Branch.is_branch?(path)
76
+ rescue BzrException => e
77
+ puts "no branch: #{e}"
78
+ exit 0
79
+ end
80
+ @path = path
81
+ @version_info = create_info
82
+ end
83
+
84
+ # returns BzrWrapper::Log
85
+ #
86
+ def log
87
+ @log || create_log
88
+ end
89
+
90
+ # checks if given 'path' is a bazaar-branch
91
+ #
92
+ def Branch.is_branch?(path)
93
+ Dir.chdir(path) do |branch|
94
+ IO.popen('bzr version-info') do |io|
95
+ if io.gets.nil?
96
+ raise BzrException, "Not ab branch: #{path}"
97
+ else
98
+ return true
99
+ end
100
+ end
101
+ end
102
+ end
103
+
104
+ # returns last _num_ Commit's or
105
+ # yields commit if block given
106
+ #
107
+ def last_commits(num,&block)
108
+ x = -num
109
+ block_given? ? log.commits[x..-1].each { |commit| yield commit } : log.commits[x..-1]
110
+ end
111
+
112
+ private
113
+
114
+ # wraps system-call 'bzr version-info'
115
+ # and creates BzrWrapper::Info
116
+ #
117
+ def create_info
118
+ Dir.chdir(@path) do |path|
119
+ arr = []
120
+ hash = {}
121
+ IO.popen('bzr version-info') do |io|
122
+ unless io.eof?
123
+ io.readlines.each do |line|
124
+ k , v = line.split(':',2)
125
+ hash[k] = v
126
+ end
127
+ end
128
+ end
129
+ ['date','revno','branch-nick','revision-id'].each { |x| raise BzrException.new("no such info-key:: #{x}") unless hash.has_key?(x) }
130
+ return Info.new(hash['date'], hash['revno'], hash['branch-nick'], hash['revision-id'])
131
+ end
132
+ end
133
+
134
+ # wraps system-call 'bzr log --forward'
135
+ # and returns BzrWrapper::Log
136
+ #
137
+ def create_log(forward=true,start=1, stop=-1)
138
+ @entries = []
139
+ cmd = "bzr log "
140
+ cmd << "--forward " if forward
141
+ cmd << "-r" << start.to_s << ".." << stop.to_s
142
+ Dir.chdir(@path) do
143
+ offsets = []
144
+ arr = IO.popen(cmd).readlines
145
+ arr.each_index { |x| offsets.push(x) if arr[x].strip.chomp == Log::SEPARATOR }
146
+ while not offsets.empty?
147
+ hash = {}
148
+ start = @_tmp || offsets.shift
149
+ stop = if offsets.empty?
150
+ -1
151
+ else
152
+ @_tmp = offsets.shift
153
+ @_tmp
154
+ end
155
+ _arr = arr[start..stop]
156
+ _arr.each_index { |x| _arr.delete_at(x) if _arr[x].strip.chomp == Log::SEPARATOR }
157
+ _arr.each_with_index do |line,i|
158
+ if line.match('message:')
159
+ hash['message'] = _arr[i+1].chomp.strip unless _arr[i+1].nil?
160
+ else
161
+ line.gsub!('branch nick:', 'branch_nick:') if line.match('branch nick:')
162
+ ['revno:','committer:','branch_nick:','timestamp:','merged:'].each do |thing|
163
+ if line.match(thing)
164
+ hash[line.split(':',2)[0].chomp.strip] = line.split(':',2)[1].chomp.strip
165
+ end
166
+ end
167
+ end
168
+ end
169
+ @entries.push(Commit.new(hash['revno'],hash['committer'], hash['branch_nick'], hash['timestamp'], hash['message'],hash['merged']))
170
+ end
171
+ end
172
+ @log = Log.new(@entries)
173
+ end
174
+ end
175
+
176
+ # class representing status-information of given bazaar-branch
177
+ #
178
+ class Info
179
+ # date of last commit
180
+ attr_reader :date
181
+ # latest revision-number
182
+ attr_reader :revno
183
+ # name/nick of the branch
184
+ attr_reader :branch_nick
185
+ # latest revision-id
186
+ attr_reader :revision_id
187
+
188
+ def initialize(date_string, revision, nick, revision_id)
189
+ @date,@revno,@branch_nick, @revision_id = Time.parse(date_string.chomp.strip), revision.chomp, nick.chomp, revision_id.chomp
190
+ end
191
+
192
+ def to_s
193
+ "revision: #{@revno} | date: #{@date.to_s} | branch-nick: #{@branch_nick} | revision-id: #{@revision_id}"
194
+ end
195
+ end
196
+
197
+ # represents the branch-log
198
+ # with <n> 'Commit's
199
+ #
200
+ class Log
201
+ SEPARATOR = '------------------------------------------------------------'
202
+ # num of log-entries
203
+ attr_reader :count
204
+ # array of BzrWrapper::Commit's of this BzrWrapper::Log
205
+ attr_reader :commits
206
+
207
+ def initialize(le_array, &block)
208
+ @count = le_array.length
209
+ @commits = le_array
210
+ block_given? ? @commits.each { |x| yield x } : self
211
+ end
212
+
213
+ # Iterates over supplied Commits.
214
+ def each_entry
215
+ block_given? ? @commits.each { |c| yield c } : @commits
216
+ end
217
+
218
+ end
219
+
220
+ # represents single commit / checkin
221
+ #
222
+ class Commit
223
+ attr_reader :revno, :committer, :branch_nick, :timestamp, :message, :merged
224
+
225
+ def initialize(revno,committer,branch_nick,timestamp,message,merged=nil)
226
+ @revno,@committer,@branch_nick,@timestamp,@message,@merged = revno,committer,branch_nick,timestamp,message,merged
227
+ end
228
+
229
+ # returns time-object of this commit
230
+ #
231
+ def time
232
+ Time.parse(@timestamp)
233
+ end
234
+
235
+ end
236
+
237
+ class BzrException < Exception
238
+ end
239
+
240
+ end
241
+ #include BzrWrapper
metadata ADDED
@@ -0,0 +1,47 @@
1
+ --- !ruby/object:Gem::Specification
2
+ rubygems_version: 0.9.4
3
+ specification_version: 1
4
+ name: bzrwrapper
5
+ version: !ruby/object:Gem::Version
6
+ version: "0.1"
7
+ date: 2007-08-24 00:00:00 +02:00
8
+ summary: "Wrapper for bazaar-vcs to extract information of bazaar-branches / see: http://bazaar-vcs.org"
9
+ require_paths:
10
+ - lib
11
+ email: rene@so36.net
12
+ homepage: http://oopen.de
13
+ rubyforge_project:
14
+ description:
15
+ autorequire: bzrwrapper
16
+ default_executable:
17
+ bindir: bin
18
+ has_rdoc: true
19
+ required_ruby_version: !ruby/object:Gem::Version::Requirement
20
+ requirements:
21
+ - - ">"
22
+ - !ruby/object:Gem::Version
23
+ version: 0.0.0
24
+ version:
25
+ platform: ruby
26
+ signing_key:
27
+ cert_chain:
28
+ post_install_message:
29
+ authors:
30
+ - Rene Paulokat
31
+ files:
32
+ - lib/bzrwrapper.rb
33
+ - README
34
+ test_files: []
35
+
36
+ rdoc_options: []
37
+
38
+ extra_rdoc_files:
39
+ - README
40
+ executables: []
41
+
42
+ extensions: []
43
+
44
+ requirements: []
45
+
46
+ dependencies: []
47
+