capillary 0.1.3 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock CHANGED
@@ -7,7 +7,7 @@ PATH
7
7
  GEM
8
8
  remote: http://rubygems.org/
9
9
  specs:
10
- json (1.5.1)
10
+ json (1.5.3)
11
11
  mini_shoulda (0.3.0)
12
12
  minitest (~> 2.1.0)
13
13
  minitest (2.1.0)
@@ -17,6 +17,5 @@ PLATFORMS
17
17
 
18
18
  DEPENDENCIES
19
19
  capillary!
20
- json (~> 1.5.1)
21
20
  mini_shoulda (~> 0.3.0)
22
21
  minitest (~> 2.0)
data/README CHANGED
@@ -36,7 +36,7 @@ Capillary parses output from Git, in the format as specified in
36
36
  test/fixtures/single_commit.txt. This output was generated from Git using the
37
37
  following command:
38
38
 
39
- git log --all --pretty=format:"%H§%P§%ad§%ae§%d§%s§"
39
+ git log --pretty=format:"%H§%P§%ad§%ae§%d§%s§"
40
40
 
41
41
  The name
42
42
  --------
@@ -19,7 +19,7 @@ require "time"
19
19
 
20
20
  module Capillary
21
21
  class Commit
22
- attr_accessor :id, :parent_ids, :committed_at, :message, :committer_email
22
+ attr_accessor :id, :parent_ids, :committed_at, :message, :committer_email, :seq_id
23
23
  attr_reader :ref_names
24
24
  LOG_SEPARATOR = "§"
25
25
 
@@ -54,7 +54,13 @@ module Capillary
54
54
  end
55
55
 
56
56
  def to_json
57
- JSON.unparse(to_hash)
57
+ JSON.unparse({ "id" => id,
58
+ "parentIds" => parent_ids,
59
+ "committedAt" => committed_at,
60
+ "committerEmail" => committer_email,
61
+ "refNames" => ref_names,
62
+ "message" => message,
63
+ "seqId" => seq_id})
58
64
  end
59
65
  end
60
66
  end
@@ -26,6 +26,7 @@ module Capillary
26
26
  @commit_count = 0
27
27
  @branches = []
28
28
  @seq_ids = {}
29
+ @commit_positions = {}
29
30
  end
30
31
 
31
32
  def <<(commit)
@@ -41,34 +42,57 @@ module Capillary
41
42
  end
42
43
 
43
44
  def to_json
44
- JSON.unparse(branches.collect { |b| b.collect { |c| c.to_hash } })
45
+ branches_json = branches.collect do |b|
46
+ "[" + b.collect { |c| "#{c.to_json}" }.join(",") + "]"
47
+ end
48
+
49
+ "[#{branches_json.join(', ')}]"
45
50
  end
46
51
 
47
52
  private
48
53
  def place_commit(commit)
49
- placed = branches.inject(false) do |placed, branch|
50
- if branch.last.parent_id == commit.id
54
+ col = 0
55
+
56
+ placed = branches.inject(false) do |was_placed, branch|
57
+ if !branch.last.closed? && branch.last.parent_id == commit.id
58
+ pos = @commit_positions[branch.last.parent_id]
59
+
60
+ if pos
61
+ diff = (pos.first - col).abs
62
+ next true if diff > 1
63
+ else
64
+ @commit_positions[commit.id] = [col, branch.length]
65
+ end
66
+
51
67
  branch << commit
52
- placed = true
68
+ was_placed = true
53
69
  end
54
70
 
55
- placed
71
+ col += 1
72
+ was_placed
56
73
  end
57
74
 
58
- branches << [commit] unless placed
75
+ unless placed
76
+ @commit_positions[commit.id] = [col, 0]
77
+ branches << [commit]
78
+ end
59
79
  end
60
80
  end
61
81
 
62
82
  class CommitNode
63
- attr_reader :seq_id, :commit, :parent_id
83
+ attr_reader :commit, :parent_id
64
84
 
65
85
  def initialize(seq_id, commit, parent_id)
66
- @seq_id = seq_id
67
86
  @commit = commit
87
+ @commit.seq_id = seq_id
68
88
  @parent_id = parent_id
89
+ @closed = false
69
90
  end
70
91
 
92
+ def seq_id; commit.seq_id; end
71
93
  def id; commit.id; end
72
- def to_hash; commit.to_hash.merge({ "seq_id" => seq_id }); end
94
+ def to_json; commit.to_json; end
95
+ def closed?; @closed; end
96
+ def close; @closed = true; end
73
97
  end
74
98
  end
@@ -17,5 +17,5 @@
17
17
  #++
18
18
 
19
19
  module Capillary
20
- VERSION = "0.1.3"
20
+ VERSION = "0.2.0"
21
21
  end
@@ -58,11 +58,12 @@ class CommitTest < MiniTest::Spec
58
58
  should "convert commit to JSON" do
59
59
  assert_equal JSON.parse(@commit.to_json), {
60
60
  "id" => "a7cf78bfff06d52b5b0aa021508b44c00cad067a",
61
- "parent_ids" => ["db75ad82d678d51b29709d26af64d4a85b6f8071"],
62
- "committed_at" => "Wed Jul 13 07:55:47 +0200 2011",
63
- "committer_email" => "chris@example.com",
64
- "ref_names" => ["master", "refactor"],
65
- "message" => "And this is commit 10 Merge branch 'topic'"
61
+ "parentIds" => ["db75ad82d678d51b29709d26af64d4a85b6f8071"],
62
+ "committedAt" => "Wed Jul 13 07:55:47 +0200 2011",
63
+ "committerEmail" => "chris@example.com",
64
+ "refNames" => ["master", "refactor"],
65
+ "message" => "And this is commit 10 Merge branch 'topic'",
66
+ "seqId" => nil
66
67
  }
67
68
  end
68
69
  end
@@ -204,6 +204,67 @@ class LogParserTest < MiniTest::Spec
204
204
  end
205
205
  end
206
206
 
207
+ #
208
+ # 0
209
+ # |
210
+ # 0
211
+ # |
212
+ # 0
213
+ # |\
214
+ # 0 |
215
+ # | |
216
+ # | 0
217
+ # | |
218
+ # | 0
219
+ # | |\
220
+ # | 0 |
221
+ # | | |
222
+ # | 0 |
223
+ # | | |
224
+ # | | 0
225
+ # | |/
226
+ # | 0
227
+ # |/
228
+ # 0
229
+ # |
230
+ context "Complex graph merged with --no-ff" do
231
+ setup do
232
+ fixtures = fixture("complex_graph.txt").split("\n")
233
+ @log_parser = Capillary::LogParser.new
234
+ @lines = []
235
+
236
+ fixtures.reject { |f| f.strip == "" }.each do |fixture|
237
+ @lines << Capillary::Commit.parse(fixture)
238
+ @log_parser << @lines.last
239
+ end
240
+ end
241
+
242
+ should "have three branches" do
243
+ assert_equal 3, @log_parser.branches.size
244
+ end
245
+
246
+ should "have five commits in the first branch" do
247
+ assert_equal 5, @log_parser.branches.first.size
248
+ end
249
+
250
+ should "have seven commits in the second branch" do
251
+ assert_equal 7, @log_parser.branches[1].size
252
+ end
253
+
254
+ should "have three commits in the third branch" do
255
+ assert_equal 3, @log_parser.branches[2].size
256
+ end
257
+
258
+ should "not create more seq_id's than there are commits" do
259
+ assert_equal [0, 1, 2, 3, 10], @log_parser.branches.first.collect { |c| c.seq_id }
260
+ end
261
+
262
+ should "not represent same commit under different seq_id's" do
263
+ assert_equal [2, 4, 5, 6, 7, 9, 10], @log_parser.branches[1].collect { |c| c.seq_id }
264
+ assert_equal [5, 8, 9], @log_parser.branches[2].collect { |c| c.seq_id }
265
+ end
266
+ end
267
+
207
268
  context "Streaming parser" do
208
269
  setup do
209
270
  @lines = fixture("complex_graph_no_ff.txt").split("\n")
@@ -0,0 +1,11 @@
1
+ ebd6ca933644ace5a405e9300ff3ff86fa9678cf§fe87dba23f935a1a6280fdc00dca01a7502772ce§Fri Jul 15 21:23:55 2011 +0200§christian@gitorious.org§ (HEAD, origin/master, origin/HEAD, master)§Up version and JSON dependency§
2
+ fe87dba23f935a1a6280fdc00dca01a7502772ce§3244d9ec9024325bee95112da51ebf7636717bd4§Fri Jul 15 21:23:40 2011 +0200§christian@gitorious.org§§Fix JSON output so it uses idiomatic camelCasing for property names§
3
+ 3244d9ec9024325bee95112da51ebf7636717bd4§99626ea0ec232d403395d2e9d7c9ee27017c2f48 50c64c2f9fecdfd32aaf37486106eabe8e3984b7§Fri Jul 15 14:53:16 2011 +0200§marius@gitorious.org§§Merge branch 'master' of gitorious.org:capillary/capillary_rb§
4
+ 99626ea0ec232d403395d2e9d7c9ee27017c2f48§13862a57985d61ae215eab265c4751182303a6e9§Fri Jul 15 14:53:03 2011 +0200§marius@gitorious.org§§Add a failing test for Christian§
5
+ 50c64c2f9fecdfd32aaf37486106eabe8e3984b7§925fee4ceea3b051dbf89e3faa60af5121c4d757§Fri Jul 15 10:50:08 2011 +0200§christian@gitorious.org§§Up gemspec version§
6
+ 925fee4ceea3b051dbf89e3faa60af5121c4d757§6aef451a1e152182c03d141d52e68be8484f51f8 7b4a45d3dd4f35fb8a2c7f941f59e9f9f70f0f95§Fri Jul 15 10:49:53 2011 +0200§christian@gitorious.org§§Merge branch 'master' of gitorious.org:capillary/capillary_
7
+ 6aef451a1e152182c03d141d52e68be8484f51f8§fb6841db8b3b757e961330d9a93895883b26cb31§Fri Jul 15 10:42:46 2011 +0200§christian@gitorious.org§§Don't add merge commits multiple times with different sequence numbers§
8
+ fb6841db8b3b757e961330d9a93895883b26cb31§faee9a1ce450bb012afe374b8fde93939655ab15§Fri Jul 15 10:41:51 2011 +0200§christian@gitorious.org§§JSON goes out§
9
+ 7b4a45d3dd4f35fb8a2c7f941f59e9f9f70f0f95§faee9a1ce450bb012afe374b8fde93939655ab15§Thu Jul 14 15:08:05 2011 +0200§marius@gitorious.org§§Fix typo in hash representation of Commit, ref_names will always be an array§
10
+ faee9a1ce450bb012afe374b8fde93939655ab15§13862a57985d61ae215eab265c4751182303a6e9§Thu Jul 14 09:18:59 2011 +0200§marius@gitorious.org§§Adding gemspec along with version§
11
+ 13862a57985d61ae215eab265c4751182303a6e9§d1cec484438bce51a1f5e6f8ed213f014a85a439§Thu Jul 14 07:54:39 2011 +0200§christian@gitorious.org§§Binary for converting log input from stdin to JSON§
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capillary
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 23
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 1
9
- - 3
10
- version: 0.1.3
8
+ - 2
9
+ - 0
10
+ version: 0.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Marius Mathiesen
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2011-07-15 00:00:00 +02:00
19
+ date: 2011-08-22 00:00:00 +02:00
20
20
  default_executable:
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency
@@ -89,6 +89,7 @@ files:
89
89
  - lib/capillary/version.rb
90
90
  - test/capillary/commit_test.rb
91
91
  - test/capillary/log_parser_test.rb
92
+ - test/fixtures/complex_graph.txt
92
93
  - test/fixtures/complex_graph_no_ff.txt
93
94
  - test/fixtures/first_commit.txt
94
95
  - test/fixtures/parent_commit.txt