This repository was archived by the owner on Dec 13, 2023. It is now read-only.
File tree 3 files changed +69
-0
lines changed
3 files changed +69
-0
lines changed Original file line number Diff line number Diff line change @@ -15,6 +15,7 @@ module Scm
15
15
require 'lib/scm/adapters/svn_adapter'
16
16
require 'lib/scm/adapters/git_adapter'
17
17
require 'lib/scm/adapters/hg_adapter'
18
+ require 'lib/scm/adapters/bzr_adapter'
18
19
require 'lib/scm/adapters/factory'
19
20
20
21
require 'lib/scm/parsers/parser'
@@ -25,6 +26,7 @@ module Scm
25
26
require 'lib/scm/parsers/git_styled_parser'
26
27
require 'lib/scm/parsers/hg_parser'
27
28
require 'lib/scm/parsers/hg_styled_parser'
29
+ require 'lib/scm/parsers/bzr_parser'
28
30
29
31
require 'lib/scm/parsers/array_writer'
30
32
require 'lib/scm/parsers/xml_writer'
Original file line number Diff line number Diff line change
1
+ module Scm ::Adapters
2
+ class BzrAdapter < AbstractAdapter
3
+ def english_name
4
+ "Bazaar"
5
+ end
6
+ end
7
+ end
Original file line number Diff line number Diff line change
1
+ module Scm ::Parsers
2
+ # This parser can process the default bzr logs, with or without the --verbose flag.
3
+ class BzrParser < Parser
4
+ def self . scm
5
+ 'bzr'
6
+ end
7
+
8
+ def self . internal_parse ( buffer , opts )
9
+ e = nil
10
+ state = :data
11
+ action = ''
12
+
13
+ buffer . each_line do |l |
14
+ next_state = state
15
+
16
+ case l
17
+ when /^-+$/
18
+ # a new commit begins
19
+ yield e if e && block_given?
20
+ e = Scm ::Commit . new
21
+ e . diffs = [ ]
22
+ next_state = :data
23
+ when /^revno:\s +(\d +)$/
24
+ e . token = $1
25
+ next_state = :data
26
+ when /^committer:\s +(.+?)(\s +<(.+)>)?$/
27
+ e . committer_name = $1
28
+ e . committer_email = $3
29
+ next_state = :data
30
+ when /^timestamp:\s +(.+)/
31
+ e . committer_date = Time . parse ( $1)
32
+ next_state = :data
33
+ when /^added:$/
34
+ next_state = :collect_files
35
+ action = 'A'
36
+ when /^modified:$/
37
+ next_state = :collect_files
38
+ action = 'M'
39
+ when /^removed:$/
40
+ next_state = :collect_files
41
+ action = 'D'
42
+ when /^message:$/
43
+ next_state = :collect_message
44
+ e . message ||= ''
45
+ when /^ (.*)$/
46
+ if state == :collect_files and $1. length > 0
47
+ e . diffs << Scm ::Diff . new ( :action => action , :path => $1)
48
+ elsif state == :collect_message
49
+ e . message << $1
50
+ e . message << "\n "
51
+ end
52
+ end
53
+
54
+ state = next_state
55
+ end
56
+ yield e if e && block_given?
57
+ end
58
+
59
+ end
60
+ end
You can’t perform that action at this time.
0 commit comments