eternity 2.0.1 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f9e978f431bd3b4d4ae0fa14c7ca7ed317d36c36
4
- data.tar.gz: c7d6711d2a6ccbbbca166f46ad8d9d76dba0a590
3
+ metadata.gz: 3f537658382ba4f3dd470886816e95c83318241b
4
+ data.tar.gz: a1adaa2d8cd91bc760752f08d17029ae992bf278
5
5
  SHA512:
6
- metadata.gz: e5e5c155ffad8a236a9b90e54e650cd863acf71d43f88f747a818c2611ee37b1ce4871987658f7b2d8337c19cec7912db8ffd6af8880fbd584d7371f8015e765
7
- data.tar.gz: 0d984b22b55280b0b7cf124458c9d6a9e8a7f8f95d0c9b5e39801c74af37f7926151fdabe08afb9286250044b81b490dd3968b127fb3e24c35656444d77a724d
6
+ metadata.gz: c8da66be778bc5fc98cb9afb69315d239b438ab9cce05e49a75268293ed6c7357f2f1dfa0c6202518757f4ac3316925ccaddc755c42d7c351783df184e4252df
7
+ data.tar.gz: 0cd4241e82f74c5d9f87e977847d5a4864d20a003705fb6cde8aa60422182f1eaae88a9fb1ecd13ed121f8cd0509d7f673fb737dde362507ed0702f69ea7f5e0
@@ -1,4 +1,5 @@
1
1
  language: ruby
2
+
2
3
  rvm:
3
4
  - 1.9.3
4
5
  - 2.0
@@ -6,8 +7,20 @@ rvm:
6
7
  - 2.2
7
8
  - 2.3.0
8
9
  - 2.4.0
9
- - jruby
10
+ - 2.5.0
11
+ - jruby-1.7.25
12
+ - jruby-9.1.7.0
13
+ - ruby-head
14
+ - jruby-head
15
+
16
+ matrix:
17
+ fast_finish: true
18
+ allow_failures:
19
+ - rvm: ruby-head
20
+ - rvm: jruby-head
21
+
10
22
  services:
11
23
  - redis-server
24
+
12
25
  before_install:
13
26
  - gem install bundler
@@ -48,27 +48,7 @@ module Eternity
48
48
 
49
49
  def history_ids
50
50
  return [] if nil?
51
- if data['history']
52
- Blob.read :history, data['history']
53
- else
54
- # Backward compatibility
55
- cache_key = self.class.history_cache_key[id]
56
- return Eternity.connection.call 'LRANGE', cache_key, 0, -1 if Eternity.connection.call('EXISTS', cache_key) == 1
57
-
58
- commit_ids =
59
- if parent_ids.count == 2
60
- current_history_ids = [parent_ids[0]] + Commit.new(parent_ids[0]).history_ids
61
- target_history_ids = [parent_ids[1]] + Commit.new(parent_ids[1]).history_ids
62
- current_history_ids - target_history_ids + target_history_ids
63
- else
64
- parent_id = parent_ids[0]
65
- parent_id ? [parent_id] + Commit.new(parent_id).history_ids : []
66
- end
67
-
68
- Eternity.connection.call 'RPUSH', cache_key, *commit_ids
69
-
70
- commit_ids
71
- end
51
+ Blob.read :history, data['history']
72
52
  end
73
53
 
74
54
  def history
@@ -14,16 +14,21 @@ module Eternity
14
14
  end
15
15
  end
16
16
 
17
- def merge(deltas, base_index)
17
+ def merge(deltas, base_index=nil)
18
18
  union(deltas).each_with_object({}) do |(collection, elements), hash|
19
19
  hash[collection] = {}
20
20
  elements.each do |id, changes|
21
21
  current_change = TrackFlatter.flatten changes
22
22
  if current_change
23
23
  if current_change['action'] == UPDATE
24
- base_data = base_index[collection].include?(id) ? base_index[collection][id].data : {}
25
- current_change['data'] = changes.select { |c| c['data'] }
26
- .inject(base_data) { |d,c| ConflictResolver.resolve d, c['data'], base_data }
24
+ if base_index
25
+ base_data = base_index[collection].include?(id) ? base_index[collection][id].data : {}
26
+ current_change['data'] = changes.select { |c| c['data'] }
27
+ .inject(base_data) { |d,c| ConflictResolver.resolve d, c['data'], base_data }
28
+ else
29
+ current_change['data'] = changes.select { |c| c['data'] }
30
+ .inject({}) { |d,c| ConflictResolver.resolve d, c['data'] }
31
+ end
27
32
  end
28
33
  hash[collection][id] = current_change
29
34
  end
@@ -48,8 +48,8 @@ module Eternity
48
48
  base_commit.with_index do |base_index|
49
49
  current_commit.with_index do |current_index|
50
50
 
51
- current_delta = Delta.merge current_history.reverse.map(&:delta), base_index
52
- target_delta = Delta.merge target_history.reverse.map(&:delta), base_index
51
+ current_delta = Delta.merge current_history.reverse.map(&:delta)
52
+ target_delta = Delta.merge target_history.reverse.map(&:delta)
53
53
  revert_delta = Delta.revert current_delta, base_index
54
54
 
55
55
  merged_delta = merge_deltas target_delta, revert_delta, base_index
@@ -93,7 +93,7 @@ module Eternity
93
93
  end
94
94
 
95
95
  def merge_deltas(target_delta, revert_delta, base_index)
96
- remaining_delta = Delta.merge remaining_history.reverse.map(&:delta), base_index
96
+ remaining_delta = Delta.merge remaining_history.reverse.map(&:delta)
97
97
  Delta.merge [revert_delta, target_delta, remaining_delta], base_index
98
98
  end
99
99
 
@@ -45,8 +45,8 @@ module Eternity
45
45
  end
46
46
 
47
47
  def expand(change)
48
- return change if change.key? 'data'
49
- change.tap do |ch|
48
+ return change.dup if change.key? 'data'
49
+ change.dup.tap do |ch|
50
50
  sha1 = ch.delete 'blob'
51
51
  ch['data'] = Blob.read(:data, sha1) if sha1
52
52
  end
@@ -1,3 +1,3 @@
1
1
  module Eternity
2
- VERSION = '2.0.1'
3
- end
2
+ VERSION = '3.0.0'
3
+ end
@@ -8,7 +8,7 @@ describe Repository, 'Merge' do
8
8
  let(:commits) { Hash.new }
9
9
 
10
10
  def commit(id, repo, &block)
11
- repo[:countries].instance_eval &block
11
+ repo[:countries].instance_eval(&block)
12
12
  commits[id] = repo.commit author: repo.name, message: "Commit #{id}"
13
13
  end
14
14
 
@@ -31,10 +31,9 @@ describe Repository, 'Merge' do
31
31
  commits[id].must_equal_index 'countries' => expected
32
32
  end
33
33
 
34
- describe 'Merge Errors' do
34
+ describe 'Errors' do
35
35
 
36
36
  it 'case 1' do
37
- skip
38
37
  commit 1, repo_1 do
39
38
  insert 'AR', name: 'Argentina'
40
39
  end
@@ -54,16 +53,14 @@ describe Repository, 'Merge' do
54
53
  end
55
54
 
56
55
  merge 5, repo_2, 4 do |delta|
57
- #delta['AR'].must_equal => {'action' => 'update', 'data' => {'name' => 'Argentina'}}
56
+ delta.must_be_nil
58
57
  end
59
58
 
60
- commits[5].with_index do |index|
61
- index['countries']['AR'].data['name'].must_equal 'Argentina'
62
- end
59
+ assert_index 5, 'AR' => digest(name: 'Argentina'),
60
+ 'UY' => digest(name: 'Uruguay')
63
61
  end
64
62
 
65
63
  it 'case 2' do
66
- skip
67
64
  commit 1, repo_1 do
68
65
  insert 'AR', name: 'Argentina'
69
66
  end
@@ -88,16 +85,14 @@ describe Repository, 'Merge' do
88
85
  end
89
86
 
90
87
  merge 6, repo_2, 5 do |delta|
91
- #delta['AR'].must_equal => {'action' => 'update', 'data' => {'name' => 'Argentina'}}
88
+ delta.must_be_nil
92
89
  end
93
90
 
94
- commits[6].with_index do |index|
95
- index['countries']['AR'].data['name'].must_equal 'Argentina'
96
- end
91
+ assert_index 6, 'AR' => digest(name: 'Argentina'),
92
+ 'UY' => digest(name: 'Uruguay')
97
93
  end
98
94
 
99
95
  it 'case 3 (patched)' do
100
- skip
101
96
  commit 1, repo_1 do
102
97
  insert 'AR', name: 'Argentina'
103
98
  end
@@ -110,33 +105,65 @@ describe Repository, 'Merge' do
110
105
  end
111
106
 
112
107
  commit 3, repo_2 do
113
- update 'AR', name: 'Argentina '
108
+ update 'AR', name: 'Republica Argentina'
114
109
  end
115
110
 
111
+ assert_index 3, 'AR' => digest(name: 'Republica Argentina'),
112
+ 'UY' => digest(name: 'Uruguay')
113
+
116
114
  commit 4, repo_1 do
117
115
  update 'AR', name: 'Arg'
118
116
  end
119
117
 
120
118
  commit 5, repo_1 do
121
- update 'AR', name: 'Argentina'
119
+ update 'AR', name: 'Argentina', code: 'ARG'
122
120
  end
123
121
 
124
122
  merge 6, repo_2, 5 do |delta|
125
- #delta['AR'].must_equal => {'action' => 'update', 'data' => {'name' => 'Argentina'}}
123
+ delta['AR'].must_equal 'action' => 'update', 'data' => {'name' => 'Republica Argentina', 'code' => 'ARG'}
126
124
  end
127
125
 
128
- commits[6].with_index do |index|
129
- index['countries']['AR'].data['name'].must_equal 'Argentina'
130
- end
126
+ assert_index 6, 'AR' => digest(name: 'Republica Argentina', code: 'ARG'),
127
+ 'UY' => digest(name: 'Uruguay')
131
128
 
132
129
  merge 7, repo_1, 3 do |delta|
133
- #delta['AR'].must_equal => {'action' => 'update', 'data' => {'name' => 'Argentina'}}
130
+ delta['AR'].must_equal 'action' => 'update', 'data' => {'name' => 'Republica Argentina', 'code' => 'ARG'}
131
+ end
132
+
133
+ assert_index 7, 'AR' => digest(name: 'Republica Argentina', code: 'ARG'),
134
+ 'UY' => digest(name: 'Uruguay')
135
+ end
136
+
137
+ it 'case 4' do
138
+ commit 1, repo_1 do
139
+ insert 'AR', name: 'Argentina'
134
140
  end
135
141
 
136
- commits[7].with_index do |index|
137
- index['countries']['AR'].data['name'].must_equal 'Argentina'
138
- end
142
+ checkout 1, repo_2
143
+
144
+ commit 2, repo_1 do
145
+ update 'AR', name: 'Republica Argentina'
146
+ end
147
+
148
+ commit 3, repo_2 do
149
+ update 'AR', name: 'Argentina', code: 'ARG'
150
+ end
151
+
152
+ merge 4, repo_2, 2 do |delta|
153
+ delta['AR'].must_equal 'action' => 'update', 'data' => {'name' => 'Republica Argentina', 'code' => 'ARG'}
154
+ end
155
+
156
+ assert_index 4, 'AR' => digest(name: 'Republica Argentina', code: 'ARG')
157
+
158
+ commit 5, repo_1 do
159
+ update 'AR', name: 'Argentina'
160
+ end
161
+
162
+ merge 6, repo_2, 5 do |delta|
163
+ delta['AR'].must_equal 'action' => 'update', 'data' => {'name' => 'Argentina', 'code' => 'ARG'}
164
+ end
139
165
 
166
+ assert_index 6, 'AR' => digest(name: 'Argentina', code: 'ARG')
140
167
  end
141
168
 
142
169
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eternity
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.1
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gabriel Naiman
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-02-05 00:00:00.000000000 Z
11
+ date: 2018-06-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: restruct