esr-rim 1.4.0 → 1.4.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.
- checksums.yaml +5 -13
- data/CHANGELOG +9 -0
- data/Rakefile +56 -56
- data/lib/rim/command/sync.rb +89 -89
- data/lib/rim/command_helper.rb +143 -143
- data/lib/rim/git.rb +2 -1
- data/lib/rim/manifest/helper.rb +82 -82
- data/lib/rim/manifest/json_reader.rb +41 -41
- data/lib/rim/manifest/manifest.json +7 -7
- data/lib/rim/module_helper.rb +57 -57
- data/lib/rim/module_info.rb +43 -43
- data/lib/rim/processor.rb +152 -152
- data/lib/rim/rim.rb +94 -94
- data/lib/rim/sync_helper.rb +150 -150
- data/lib/rim/sync_module_helper.rb +107 -107
- data/lib/rim/upload_helper.rb +69 -69
- data/lib/rim/upload_module_helper.rb +163 -162
- data/lib/rim/version.rb +1 -1
- data/test/command_helper_test.rb +83 -83
- data/test/file_helper_test.rb +132 -132
- data/test/manifest_helper_test.rb +29 -29
- data/test/manifest_test_dir/manifest.rim +9 -9
- data/test/processor_test.rb +32 -32
- data/test/sync_helper_test.rb +296 -296
- data/test/sync_module_helper_test.rb +126 -126
- data/test/upload_helper_test.rb +403 -403
- data/test/upload_module_helper_test.rb +92 -92
- metadata +9 -15
- data/test/dirty_check/dir1/file2 +0 -1
- data/test/dirty_check/file1 +0 -1
- data/test/dirty_check/ign_file1 +0 -1
- data/test/rim_info/mod1/dir1/file2 +0 -1
- data/test/rim_info/mod1/file1 +0 -1
- data/test/rim_info/unrelated_file +0 -1
@@ -1,9 +1,9 @@
|
|
1
|
-
{
|
2
|
-
"url" : "ssh://gerrit",
|
3
|
-
"dependencies" : [
|
4
|
-
{
|
5
|
-
"unit":"nvStorage", "version": "1.1", "destination": "./bsw/nvStorage",
|
6
|
-
"unit":"eepromManager", "version": "2.3", "destination": "./bsw/eeprom"
|
7
|
-
}
|
8
|
-
]
|
9
|
-
}
|
1
|
+
{
|
2
|
+
"url" : "ssh://gerrit",
|
3
|
+
"dependencies" : [
|
4
|
+
{
|
5
|
+
"unit":"nvStorage", "version": "1.1", "destination": "./bsw/nvStorage",
|
6
|
+
"unit":"eepromManager", "version": "2.3", "destination": "./bsw/eeprom"
|
7
|
+
}
|
8
|
+
]
|
9
|
+
}
|
data/test/processor_test.rb
CHANGED
@@ -1,32 +1,32 @@
|
|
1
|
-
$:.unshift File.join(File.dirname(__FILE__),"..","lib")
|
2
|
-
$:.unshift File.join(File.dirname(__FILE__))
|
3
|
-
|
4
|
-
require 'minitest/autorun'
|
5
|
-
require 'rim/processor'
|
6
|
-
require 'test_helper'
|
7
|
-
require 'fileutils'
|
8
|
-
|
9
|
-
class ProcessorTest < Minitest::Test
|
10
|
-
include FileUtils
|
11
|
-
include TestHelper
|
12
|
-
|
13
|
-
def setup
|
14
|
-
test_dir = empty_test_dir("command_helper_test")
|
15
|
-
end
|
16
|
-
|
17
|
-
def teardown
|
18
|
-
remove_test_dirs
|
19
|
-
end
|
20
|
-
|
21
|
-
def test_get_absolute_remote_url
|
22
|
-
cut = RIM::Processor.new(".", nil)
|
23
|
-
assert File.expand_path(".") == cut.get_absolute_remote_url("file://.")
|
24
|
-
assert File.expand_path("abcd", ".") == cut.get_absolute_remote_url("file://abcd")
|
25
|
-
assert File.expand_path("abc", ".") == cut.get_absolute_remote_url("file://./abc")
|
26
|
-
assert "C:/abcdef" == cut.get_absolute_remote_url("file:///C|/abcdef")
|
27
|
-
assert "/abcdef/defghi" == cut.get_absolute_remote_url("file:///abcdef/defghi")
|
28
|
-
assert "ssh://gerrit/abcde" == cut.get_absolute_remote_url("abcde")
|
29
|
-
assert "ssh://gerrit2/abcde" == cut.get_absolute_remote_url("ssh://gerrit2/abcde")
|
30
|
-
end
|
31
|
-
|
32
|
-
end
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__),"..","lib")
|
2
|
+
$:.unshift File.join(File.dirname(__FILE__))
|
3
|
+
|
4
|
+
require 'minitest/autorun'
|
5
|
+
require 'rim/processor'
|
6
|
+
require 'test_helper'
|
7
|
+
require 'fileutils'
|
8
|
+
|
9
|
+
class ProcessorTest < Minitest::Test
|
10
|
+
include FileUtils
|
11
|
+
include TestHelper
|
12
|
+
|
13
|
+
def setup
|
14
|
+
test_dir = empty_test_dir("command_helper_test")
|
15
|
+
end
|
16
|
+
|
17
|
+
def teardown
|
18
|
+
remove_test_dirs
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_get_absolute_remote_url
|
22
|
+
cut = RIM::Processor.new(".", nil)
|
23
|
+
assert File.expand_path(".") == cut.get_absolute_remote_url("file://.")
|
24
|
+
assert File.expand_path("abcd", ".") == cut.get_absolute_remote_url("file://abcd")
|
25
|
+
assert File.expand_path("abc", ".") == cut.get_absolute_remote_url("file://./abc")
|
26
|
+
assert "C:/abcdef" == cut.get_absolute_remote_url("file:///C|/abcdef")
|
27
|
+
assert "/abcdef/defghi" == cut.get_absolute_remote_url("file:///abcdef/defghi")
|
28
|
+
assert "ssh://gerrit/abcde" == cut.get_absolute_remote_url("abcde")
|
29
|
+
assert "ssh://gerrit2/abcde" == cut.get_absolute_remote_url("ssh://gerrit2/abcde")
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
data/test/sync_helper_test.rb
CHANGED
@@ -1,296 +1,296 @@
|
|
1
|
-
$:.unshift File.join(File.dirname(__FILE__),"..","lib")
|
2
|
-
$:.unshift File.join(File.dirname(__FILE__))
|
3
|
-
|
4
|
-
require 'minitest/autorun'
|
5
|
-
require 'rim/git'
|
6
|
-
require 'rim/module_info'
|
7
|
-
require 'rim/status_builder'
|
8
|
-
require 'rim/sync_helper'
|
9
|
-
require 'test_helper'
|
10
|
-
require 'fileutils'
|
11
|
-
|
12
|
-
class SyncHelperTest < Minitest::Test
|
13
|
-
include FileUtils
|
14
|
-
include TestHelper
|
15
|
-
|
16
|
-
def setup
|
17
|
-
test_dir = empty_test_dir("sync_helper_test")
|
18
|
-
@remote_git_dir = File.join(test_dir, "remote_git")
|
19
|
-
@ws_remote_dir = File.join(test_dir, "remote_ws")
|
20
|
-
@ws_dir = File.join(test_dir, "ws")
|
21
|
-
@logger = Logger.new($stdout)
|
22
|
-
@logger.level = Logger::ERROR unless ARGV.include? "debug"
|
23
|
-
RIM::GitSession.logger = @logger
|
24
|
-
end
|
25
|
-
|
26
|
-
def teardown
|
27
|
-
remove_test_dirs
|
28
|
-
end
|
29
|
-
|
30
|
-
def test_files_are_synchronized
|
31
|
-
mod1_info = create_module_git("mod1")
|
32
|
-
mod2_info = create_module_git("mod2")
|
33
|
-
create_ws_git("testbr")
|
34
|
-
cut = RIM::SyncHelper.new(@ws_dir, @logger, [mod1_info, mod2_info])
|
35
|
-
cut.sync
|
36
|
-
RIM::git_session(@ws_dir) do |s|
|
37
|
-
assert !File.exist?(File.join(@ws_dir, "mod1"))
|
38
|
-
assert !File.exist?(File.join(@ws_dir, "mod2"))
|
39
|
-
s.execute("git checkout rim/testbr")
|
40
|
-
check_not_dirty(s)
|
41
|
-
log = s.execute("git log | grep \" module \"").split("\n").sort
|
42
|
-
assert log.size == 2
|
43
|
-
assert log[0].include?("mod1")
|
44
|
-
assert log[1].include?("mod2")
|
45
|
-
assert File.exist?(File.join(@ws_dir, "mod1"))
|
46
|
-
assert File.exist?(File.join(@ws_dir, "mod2"))
|
47
|
-
assert File.exist?(File.join(@ws_dir, "mod1", "readme.txt"))
|
48
|
-
assert File.exist?(File.join(@ws_dir, "mod2", "readme.txt"))
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
def test_files_are_synchronized_subtree
|
53
|
-
mod_git_dir = create_all_module_git("mod_all")
|
54
|
-
mod_a_info = RIM::ModuleInfo.new("file://" + mod_git_dir, "modules/a", "master", nil, nil, "mod_a")
|
55
|
-
create_ws_git("testbr")
|
56
|
-
cut = RIM::SyncHelper.new(@ws_dir, @logger, [mod_a_info])
|
57
|
-
cut.sync
|
58
|
-
RIM::git_session(@ws_dir) do |s|
|
59
|
-
assert !File.exist?(File.join(@ws_dir, "modules", "a"))
|
60
|
-
s.execute("git checkout rim/testbr")
|
61
|
-
check_not_dirty(s)
|
62
|
-
log = s.execute("git log | grep \" module \"").split("\n").sort
|
63
|
-
assert log.size == 1
|
64
|
-
assert log[0].include?("modules/a")
|
65
|
-
assert !File.exist?(File.join(@ws_dir, "modules", "b"))
|
66
|
-
assert File.exist?(File.join(@ws_dir, "modules", "a"))
|
67
|
-
assert File.exist?(File.join(@ws_dir, "modules", "a", "file_a.c"))
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
def test_files_are_synchronized_subtree_deep
|
72
|
-
mod_git_dir = create_all_module_git("mod_all")
|
73
|
-
mod_a_info = RIM::ModuleInfo.new("file://" + mod_git_dir, "modules/b_src", "master", nil, nil, "mod_b/src")
|
74
|
-
create_ws_git("testbr")
|
75
|
-
cut = RIM::SyncHelper.new(@ws_dir, @logger, [mod_a_info])
|
76
|
-
cut.sync
|
77
|
-
RIM::git_session(@ws_dir) do |s|
|
78
|
-
assert !File.exist?(File.join(@ws_dir, "modules", "b_src"))
|
79
|
-
s.execute("git checkout rim/testbr")
|
80
|
-
check_not_dirty(s)
|
81
|
-
log = s.execute("git log | grep \" module \"").split("\n").sort
|
82
|
-
assert log.size == 1
|
83
|
-
assert log[0].include?("modules/b_src")
|
84
|
-
assert File.exist?(File.join(@ws_dir, "modules", "b_src", "file_b.c"))
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
|
89
|
-
def test_files_are_synchronized_on_existing_branch
|
90
|
-
mod1_info = create_module_git("mod1")
|
91
|
-
mod2_info = create_module_git("mod2")
|
92
|
-
create_ws_git("testbr")
|
93
|
-
cut = RIM::SyncHelper.new(@ws_dir, @logger, [mod1_info, mod2_info])
|
94
|
-
cut.sync
|
95
|
-
`echo ' changed' >> #{File.join(@ws_dir, "readme")}`
|
96
|
-
RIM::git_session(@ws_dir) do |s|
|
97
|
-
s.execute("git commit . -m \"Changed ws file\"")
|
98
|
-
end
|
99
|
-
remote_path = path_from_module_info(mod1_info)
|
100
|
-
`echo ' changed' >> #{File.join(remote_path, "readme.txt")}`
|
101
|
-
RIM::git_session(remote_path) do |f|
|
102
|
-
f.execute("git commit . -m \"Changed mod1 file\"")
|
103
|
-
end
|
104
|
-
cut.sync
|
105
|
-
RIM::git_session(@ws_dir) do |s|
|
106
|
-
s.execute("git checkout rim/testbr")
|
107
|
-
check_not_dirty(s)
|
108
|
-
log = s.execute("git log | grep \" module \"").split("\n").sort
|
109
|
-
assert log.size == 3
|
110
|
-
assert log[0].include?("mod1")
|
111
|
-
assert log[1].include?("mod1")
|
112
|
-
assert log[2].include?("mod2")
|
113
|
-
assert File.exist?(File.join(@ws_dir, "mod1"))
|
114
|
-
`cat #{File.join(@ws_dir, "mod1/readme.txt")}`.start_with?("Content. changed")
|
115
|
-
assert File.exist?(File.join(@ws_dir, "mod2"))
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
def test_files_are_synchronized_on_new_branch_if_behind_last_remote_commit
|
120
|
-
mod1_info = create_module_git("mod1")
|
121
|
-
mod2_info = create_module_git("mod2")
|
122
|
-
create_ws_git("testbr")
|
123
|
-
cut = RIM::SyncHelper.new(@ws_dir, @logger, [mod1_info, mod2_info])
|
124
|
-
cut.sync
|
125
|
-
`echo ' changed' >> #{File.join(@ws_remote_dir, "readme")}`
|
126
|
-
RIM::git_session(@ws_remote_dir) do |s|
|
127
|
-
s.execute("git commit . -m \"Changed ws file\"")
|
128
|
-
end
|
129
|
-
RIM::git_session(@ws_dir) do |s|
|
130
|
-
s.execute("git pull")
|
131
|
-
assert !has_ancestor?(s, "rim/testbr", "testbr")
|
132
|
-
end
|
133
|
-
cut.sync
|
134
|
-
RIM::git_session(@ws_dir) do |s|
|
135
|
-
assert has_ancestor?(s, "rim/testbr", "testbr")
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
|
-
def test_existing_non_ignored_files_are_removed_during_sync
|
140
|
-
mod1_info = create_module_git("mod1")
|
141
|
-
create_ws_git("testbr") do |s|
|
142
|
-
FileUtils.mkdir_p(File.join(@ws_remote_dir, "mod1"))
|
143
|
-
File.open(File.join(@ws_remote_dir, "mod1", "existing.txt"), "w") do |f|
|
144
|
-
f.write("Content")
|
145
|
-
end
|
146
|
-
s.execute("git add --all mod1")
|
147
|
-
s.execute("git commit -m \"Create existing file within mod1\"")
|
148
|
-
end
|
149
|
-
cut = RIM::SyncHelper.new(@ws_dir, @logger, [mod1_info])
|
150
|
-
cut.sync
|
151
|
-
RIM::git_session(@ws_dir) do |s|
|
152
|
-
s.execute("git rebase rim/testbr")
|
153
|
-
assert !File.exists?(File.join(@ws_dir, "mod1", "existing.txt"))
|
154
|
-
end
|
155
|
-
end
|
156
|
-
|
157
|
-
def test_case_change_in_filename_is_synced_correctly
|
158
|
-
mod1_info = create_module_git("mod1")
|
159
|
-
create_ws_git("testbr")
|
160
|
-
cut = RIM::SyncHelper.new(@ws_dir, @logger, [mod1_info])
|
161
|
-
cut.sync
|
162
|
-
remote_path = path_from_module_info(mod1_info)
|
163
|
-
RIM::git_session(remote_path) do |s|
|
164
|
-
FileUtils.mv(File.join(remote_path, "readme.txt"), File.join(remote_path, "readme.tx_"))
|
165
|
-
s.execute("git add --all .")
|
166
|
-
s.execute("git commit -m \"Temporary change of filename within mod1\"")
|
167
|
-
FileUtils.mv(File.join(remote_path, "readme.tx_"), File.join(remote_path, "Readme.txt"))
|
168
|
-
s.execute("git add --all .")
|
169
|
-
s.execute("git commit -m \"Changed case in filename within mod1\"")
|
170
|
-
end
|
171
|
-
cut.sync
|
172
|
-
RIM::git_session(@ws_dir) do |s|
|
173
|
-
s.execute("git rebase rim/testbr")
|
174
|
-
out = s.execute("git show --name-only")
|
175
|
-
assert out.include?("readme.txt")
|
176
|
-
assert out.include?("Readme.txt")
|
177
|
-
end
|
178
|
-
end
|
179
|
-
|
180
|
-
def test_sync_on_different_branches
|
181
|
-
mod1_info = create_module_git("mod1")
|
182
|
-
create_ws_git("testbr")
|
183
|
-
cut = RIM::SyncHelper.new(@ws_dir, @logger, [mod1_info])
|
184
|
-
cut.sync
|
185
|
-
remote_path = path_from_module_info(mod1_info)
|
186
|
-
RIM::git_session(remote_path) do |s|
|
187
|
-
FileUtils.mv(File.join(remote_path, "readme.txt"), File.join(remote_path, "readme.tx_"))
|
188
|
-
s.execute("git add --all .")
|
189
|
-
s.execute("git commit -m \"Temporary change of filename within mod1\"")
|
190
|
-
FileUtils.mv(File.join(remote_path, "readme.tx_"), File.join(remote_path, "Readme.txt"))
|
191
|
-
s.execute("git add --all .")
|
192
|
-
s.execute("git commit -m \"Changed case in filename within mod1\"")
|
193
|
-
end
|
194
|
-
RIM::git_session(@ws_dir) do |s|
|
195
|
-
s.execute("git checkout -b branch2")
|
196
|
-
end
|
197
|
-
cut.sync
|
198
|
-
RIM::git_session(@ws_dir) do |s|
|
199
|
-
s.execute("git rebase rim/branch2")
|
200
|
-
out = s.execute("git show --name-only")
|
201
|
-
assert out.include?("Readme.txt")
|
202
|
-
end
|
203
|
-
RIM::git_session(remote_path) do |s|
|
204
|
-
`echo ' changed' >> #{File.join(remote_path, "Readme.txt")}`
|
205
|
-
s.execute("git commit . -m \"Changed module file\"")
|
206
|
-
end
|
207
|
-
cut.sync
|
208
|
-
RIM::git_session(@ws_dir) do |s|
|
209
|
-
s.execute("git rebase rim/branch2")
|
210
|
-
s.execute("git checkout testbr")
|
211
|
-
s.execute("git reset --hard branch2~1")
|
212
|
-
s.execute("git push origin branch2:branch2")
|
213
|
-
end
|
214
|
-
cut.sync
|
215
|
-
RIM::git_session(@ws_dir) do |s|
|
216
|
-
s.execute("git reset --hard rim/testbr")
|
217
|
-
out = s.execute("git show --name-only")
|
218
|
-
assert out.include?("Readme.txt")
|
219
|
-
end
|
220
|
-
end
|
221
|
-
|
222
|
-
private
|
223
|
-
def create_ws_git(branch = "master")
|
224
|
-
FileUtils.mkdir_p(@ws_remote_dir)
|
225
|
-
RIM::git_session(@ws_remote_dir) do |s|
|
226
|
-
s.execute("git init")
|
227
|
-
s.execute("git checkout -B #{branch}")
|
228
|
-
File.open(File.join(@ws_remote_dir, ".gitignore"), "w") do |f|
|
229
|
-
f.write(".rim")
|
230
|
-
end
|
231
|
-
File.open(File.join(@ws_remote_dir, "readme"), "w") do |f|
|
232
|
-
f.write("Content")
|
233
|
-
end
|
234
|
-
s.execute("git add .")
|
235
|
-
s.execute("git commit -m \"Initial commit\"")
|
236
|
-
yield s if block_given?
|
237
|
-
end
|
238
|
-
FileUtils.mkdir_p(@ws_dir)
|
239
|
-
RIM::git_session(@ws_dir) do |s|
|
240
|
-
s.execute("git clone #{@ws_remote_dir} #{@ws_dir}")
|
241
|
-
end
|
242
|
-
end
|
243
|
-
|
244
|
-
def create_module_git(name, branch = "master")
|
245
|
-
git_dir = File.join(@remote_git_dir, name)
|
246
|
-
FileUtils.mkdir_p(git_dir)
|
247
|
-
RIM::git_session(git_dir) do |s|
|
248
|
-
s.execute("git init")
|
249
|
-
s.execute("git checkout -B #{branch}")
|
250
|
-
File.open(File.join(git_dir, "readme.txt"), "w") do |f|
|
251
|
-
f.write("Content.")
|
252
|
-
end
|
253
|
-
s.execute("git add .")
|
254
|
-
s.execute("git commit -m \"Initial commit\"")
|
255
|
-
end
|
256
|
-
return RIM::ModuleInfo.new("file://" + git_dir, name, branch)
|
257
|
-
end
|
258
|
-
|
259
|
-
def create_all_module_git(name, branch = "master")
|
260
|
-
git_dir = File.join(@remote_git_dir, name)
|
261
|
-
FileUtils.mkdir_p(File.join(git_dir,"mod_a"))
|
262
|
-
FileUtils.mkdir_p(File.join(git_dir,"mod_b","src"))
|
263
|
-
RIM::git_session(git_dir) do |s|
|
264
|
-
s.execute("git init")
|
265
|
-
s.execute("git checkout -B #{branch}")
|
266
|
-
File.open(File.join(git_dir, "readme.txt"), "w") do |f|
|
267
|
-
f.write("Content.")
|
268
|
-
end
|
269
|
-
File.open(File.join(git_dir, "mod_a", "file_a.c"), "w") do |f|
|
270
|
-
f.write("Content.")
|
271
|
-
end
|
272
|
-
File.open(File.join(git_dir, "mod_b", "src", "file_b.c"), "w") do |f|
|
273
|
-
f.write("Content.")
|
274
|
-
end
|
275
|
-
s.execute("git add .")
|
276
|
-
s.execute("git commit -m \"Initial commit\"")
|
277
|
-
end
|
278
|
-
return git_dir
|
279
|
-
end
|
280
|
-
|
281
|
-
def path_from_module_info(module_info)
|
282
|
-
module_info.remote_url.gsub(/^file:\/\//, "")
|
283
|
-
end
|
284
|
-
|
285
|
-
def check_not_dirty(session)
|
286
|
-
status = RIM::StatusBuilder.new.rev_status(session, "HEAD")
|
287
|
-
status.modules.each do |m|
|
288
|
-
assert !m.dirty?
|
289
|
-
end
|
290
|
-
end
|
291
|
-
|
292
|
-
def has_ancestor?(session, rev, ancestor)
|
293
|
-
rev = session.execute("git rev-list #{rev}").include?(session.rev_sha1(ancestor))
|
294
|
-
end
|
295
|
-
|
296
|
-
end
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__),"..","lib")
|
2
|
+
$:.unshift File.join(File.dirname(__FILE__))
|
3
|
+
|
4
|
+
require 'minitest/autorun'
|
5
|
+
require 'rim/git'
|
6
|
+
require 'rim/module_info'
|
7
|
+
require 'rim/status_builder'
|
8
|
+
require 'rim/sync_helper'
|
9
|
+
require 'test_helper'
|
10
|
+
require 'fileutils'
|
11
|
+
|
12
|
+
class SyncHelperTest < Minitest::Test
|
13
|
+
include FileUtils
|
14
|
+
include TestHelper
|
15
|
+
|
16
|
+
def setup
|
17
|
+
test_dir = empty_test_dir("sync_helper_test")
|
18
|
+
@remote_git_dir = File.join(test_dir, "remote_git")
|
19
|
+
@ws_remote_dir = File.join(test_dir, "remote_ws")
|
20
|
+
@ws_dir = File.join(test_dir, "ws")
|
21
|
+
@logger = Logger.new($stdout)
|
22
|
+
@logger.level = Logger::ERROR unless ARGV.include? "debug"
|
23
|
+
RIM::GitSession.logger = @logger
|
24
|
+
end
|
25
|
+
|
26
|
+
def teardown
|
27
|
+
remove_test_dirs
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_files_are_synchronized
|
31
|
+
mod1_info = create_module_git("mod1")
|
32
|
+
mod2_info = create_module_git("mod2")
|
33
|
+
create_ws_git("testbr")
|
34
|
+
cut = RIM::SyncHelper.new(@ws_dir, @logger, [mod1_info, mod2_info])
|
35
|
+
cut.sync
|
36
|
+
RIM::git_session(@ws_dir) do |s|
|
37
|
+
assert !File.exist?(File.join(@ws_dir, "mod1"))
|
38
|
+
assert !File.exist?(File.join(@ws_dir, "mod2"))
|
39
|
+
s.execute("git checkout rim/testbr")
|
40
|
+
check_not_dirty(s)
|
41
|
+
log = s.execute("git log | grep \" module \"").split("\n").sort
|
42
|
+
assert log.size == 2
|
43
|
+
assert log[0].include?("mod1")
|
44
|
+
assert log[1].include?("mod2")
|
45
|
+
assert File.exist?(File.join(@ws_dir, "mod1"))
|
46
|
+
assert File.exist?(File.join(@ws_dir, "mod2"))
|
47
|
+
assert File.exist?(File.join(@ws_dir, "mod1", "readme.txt"))
|
48
|
+
assert File.exist?(File.join(@ws_dir, "mod2", "readme.txt"))
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_files_are_synchronized_subtree
|
53
|
+
mod_git_dir = create_all_module_git("mod_all")
|
54
|
+
mod_a_info = RIM::ModuleInfo.new("file://" + mod_git_dir, "modules/a", "master", nil, nil, "mod_a")
|
55
|
+
create_ws_git("testbr")
|
56
|
+
cut = RIM::SyncHelper.new(@ws_dir, @logger, [mod_a_info])
|
57
|
+
cut.sync
|
58
|
+
RIM::git_session(@ws_dir) do |s|
|
59
|
+
assert !File.exist?(File.join(@ws_dir, "modules", "a"))
|
60
|
+
s.execute("git checkout rim/testbr")
|
61
|
+
check_not_dirty(s)
|
62
|
+
log = s.execute("git log | grep \" module \"").split("\n").sort
|
63
|
+
assert log.size == 1
|
64
|
+
assert log[0].include?("modules/a")
|
65
|
+
assert !File.exist?(File.join(@ws_dir, "modules", "b"))
|
66
|
+
assert File.exist?(File.join(@ws_dir, "modules", "a"))
|
67
|
+
assert File.exist?(File.join(@ws_dir, "modules", "a", "file_a.c"))
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_files_are_synchronized_subtree_deep
|
72
|
+
mod_git_dir = create_all_module_git("mod_all")
|
73
|
+
mod_a_info = RIM::ModuleInfo.new("file://" + mod_git_dir, "modules/b_src", "master", nil, nil, "mod_b/src")
|
74
|
+
create_ws_git("testbr")
|
75
|
+
cut = RIM::SyncHelper.new(@ws_dir, @logger, [mod_a_info])
|
76
|
+
cut.sync
|
77
|
+
RIM::git_session(@ws_dir) do |s|
|
78
|
+
assert !File.exist?(File.join(@ws_dir, "modules", "b_src"))
|
79
|
+
s.execute("git checkout rim/testbr")
|
80
|
+
check_not_dirty(s)
|
81
|
+
log = s.execute("git log | grep \" module \"").split("\n").sort
|
82
|
+
assert log.size == 1
|
83
|
+
assert log[0].include?("modules/b_src")
|
84
|
+
assert File.exist?(File.join(@ws_dir, "modules", "b_src", "file_b.c"))
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
|
89
|
+
def test_files_are_synchronized_on_existing_branch
|
90
|
+
mod1_info = create_module_git("mod1")
|
91
|
+
mod2_info = create_module_git("mod2")
|
92
|
+
create_ws_git("testbr")
|
93
|
+
cut = RIM::SyncHelper.new(@ws_dir, @logger, [mod1_info, mod2_info])
|
94
|
+
cut.sync
|
95
|
+
`echo ' changed' >> #{File.join(@ws_dir, "readme")}`
|
96
|
+
RIM::git_session(@ws_dir) do |s|
|
97
|
+
s.execute("git commit . -m \"Changed ws file\"")
|
98
|
+
end
|
99
|
+
remote_path = path_from_module_info(mod1_info)
|
100
|
+
`echo ' changed' >> #{File.join(remote_path, "readme.txt")}`
|
101
|
+
RIM::git_session(remote_path) do |f|
|
102
|
+
f.execute("git commit . -m \"Changed mod1 file\"")
|
103
|
+
end
|
104
|
+
cut.sync
|
105
|
+
RIM::git_session(@ws_dir) do |s|
|
106
|
+
s.execute("git checkout rim/testbr")
|
107
|
+
check_not_dirty(s)
|
108
|
+
log = s.execute("git log | grep \" module \"").split("\n").sort
|
109
|
+
assert log.size == 3
|
110
|
+
assert log[0].include?("mod1")
|
111
|
+
assert log[1].include?("mod1")
|
112
|
+
assert log[2].include?("mod2")
|
113
|
+
assert File.exist?(File.join(@ws_dir, "mod1"))
|
114
|
+
`cat #{File.join(@ws_dir, "mod1/readme.txt")}`.start_with?("Content. changed")
|
115
|
+
assert File.exist?(File.join(@ws_dir, "mod2"))
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
def test_files_are_synchronized_on_new_branch_if_behind_last_remote_commit
|
120
|
+
mod1_info = create_module_git("mod1")
|
121
|
+
mod2_info = create_module_git("mod2")
|
122
|
+
create_ws_git("testbr")
|
123
|
+
cut = RIM::SyncHelper.new(@ws_dir, @logger, [mod1_info, mod2_info])
|
124
|
+
cut.sync
|
125
|
+
`echo ' changed' >> #{File.join(@ws_remote_dir, "readme")}`
|
126
|
+
RIM::git_session(@ws_remote_dir) do |s|
|
127
|
+
s.execute("git commit . -m \"Changed ws file\"")
|
128
|
+
end
|
129
|
+
RIM::git_session(@ws_dir) do |s|
|
130
|
+
s.execute("git pull")
|
131
|
+
assert !has_ancestor?(s, "rim/testbr", "testbr")
|
132
|
+
end
|
133
|
+
cut.sync
|
134
|
+
RIM::git_session(@ws_dir) do |s|
|
135
|
+
assert has_ancestor?(s, "rim/testbr", "testbr")
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
def test_existing_non_ignored_files_are_removed_during_sync
|
140
|
+
mod1_info = create_module_git("mod1")
|
141
|
+
create_ws_git("testbr") do |s|
|
142
|
+
FileUtils.mkdir_p(File.join(@ws_remote_dir, "mod1"))
|
143
|
+
File.open(File.join(@ws_remote_dir, "mod1", "existing.txt"), "w") do |f|
|
144
|
+
f.write("Content")
|
145
|
+
end
|
146
|
+
s.execute("git add --all mod1")
|
147
|
+
s.execute("git commit -m \"Create existing file within mod1\"")
|
148
|
+
end
|
149
|
+
cut = RIM::SyncHelper.new(@ws_dir, @logger, [mod1_info])
|
150
|
+
cut.sync
|
151
|
+
RIM::git_session(@ws_dir) do |s|
|
152
|
+
s.execute("git rebase rim/testbr")
|
153
|
+
assert !File.exists?(File.join(@ws_dir, "mod1", "existing.txt"))
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
def test_case_change_in_filename_is_synced_correctly
|
158
|
+
mod1_info = create_module_git("mod1")
|
159
|
+
create_ws_git("testbr")
|
160
|
+
cut = RIM::SyncHelper.new(@ws_dir, @logger, [mod1_info])
|
161
|
+
cut.sync
|
162
|
+
remote_path = path_from_module_info(mod1_info)
|
163
|
+
RIM::git_session(remote_path) do |s|
|
164
|
+
FileUtils.mv(File.join(remote_path, "readme.txt"), File.join(remote_path, "readme.tx_"))
|
165
|
+
s.execute("git add --all .")
|
166
|
+
s.execute("git commit -m \"Temporary change of filename within mod1\"")
|
167
|
+
FileUtils.mv(File.join(remote_path, "readme.tx_"), File.join(remote_path, "Readme.txt"))
|
168
|
+
s.execute("git add --all .")
|
169
|
+
s.execute("git commit -m \"Changed case in filename within mod1\"")
|
170
|
+
end
|
171
|
+
cut.sync
|
172
|
+
RIM::git_session(@ws_dir) do |s|
|
173
|
+
s.execute("git rebase rim/testbr")
|
174
|
+
out = s.execute("git show --name-only")
|
175
|
+
assert out.include?("readme.txt")
|
176
|
+
assert out.include?("Readme.txt")
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
def test_sync_on_different_branches
|
181
|
+
mod1_info = create_module_git("mod1")
|
182
|
+
create_ws_git("testbr")
|
183
|
+
cut = RIM::SyncHelper.new(@ws_dir, @logger, [mod1_info])
|
184
|
+
cut.sync
|
185
|
+
remote_path = path_from_module_info(mod1_info)
|
186
|
+
RIM::git_session(remote_path) do |s|
|
187
|
+
FileUtils.mv(File.join(remote_path, "readme.txt"), File.join(remote_path, "readme.tx_"))
|
188
|
+
s.execute("git add --all .")
|
189
|
+
s.execute("git commit -m \"Temporary change of filename within mod1\"")
|
190
|
+
FileUtils.mv(File.join(remote_path, "readme.tx_"), File.join(remote_path, "Readme.txt"))
|
191
|
+
s.execute("git add --all .")
|
192
|
+
s.execute("git commit -m \"Changed case in filename within mod1\"")
|
193
|
+
end
|
194
|
+
RIM::git_session(@ws_dir) do |s|
|
195
|
+
s.execute("git checkout -b branch2")
|
196
|
+
end
|
197
|
+
cut.sync
|
198
|
+
RIM::git_session(@ws_dir) do |s|
|
199
|
+
s.execute("git rebase rim/branch2")
|
200
|
+
out = s.execute("git show --name-only")
|
201
|
+
assert out.include?("Readme.txt")
|
202
|
+
end
|
203
|
+
RIM::git_session(remote_path) do |s|
|
204
|
+
`echo ' changed' >> #{File.join(remote_path, "Readme.txt")}`
|
205
|
+
s.execute("git commit . -m \"Changed module file\"")
|
206
|
+
end
|
207
|
+
cut.sync
|
208
|
+
RIM::git_session(@ws_dir) do |s|
|
209
|
+
s.execute("git rebase rim/branch2")
|
210
|
+
s.execute("git checkout testbr")
|
211
|
+
s.execute("git reset --hard branch2~1")
|
212
|
+
s.execute("git push origin branch2:branch2")
|
213
|
+
end
|
214
|
+
cut.sync
|
215
|
+
RIM::git_session(@ws_dir) do |s|
|
216
|
+
s.execute("git reset --hard rim/testbr")
|
217
|
+
out = s.execute("git show --name-only")
|
218
|
+
assert out.include?("Readme.txt")
|
219
|
+
end
|
220
|
+
end
|
221
|
+
|
222
|
+
private
|
223
|
+
def create_ws_git(branch = "master")
|
224
|
+
FileUtils.mkdir_p(@ws_remote_dir)
|
225
|
+
RIM::git_session(@ws_remote_dir) do |s|
|
226
|
+
s.execute("git init")
|
227
|
+
s.execute("git checkout -B #{branch}")
|
228
|
+
File.open(File.join(@ws_remote_dir, ".gitignore"), "w") do |f|
|
229
|
+
f.write(".rim")
|
230
|
+
end
|
231
|
+
File.open(File.join(@ws_remote_dir, "readme"), "w") do |f|
|
232
|
+
f.write("Content")
|
233
|
+
end
|
234
|
+
s.execute("git add .")
|
235
|
+
s.execute("git commit -m \"Initial commit\"")
|
236
|
+
yield s if block_given?
|
237
|
+
end
|
238
|
+
FileUtils.mkdir_p(@ws_dir)
|
239
|
+
RIM::git_session(@ws_dir) do |s|
|
240
|
+
s.execute("git clone #{@ws_remote_dir} #{@ws_dir}")
|
241
|
+
end
|
242
|
+
end
|
243
|
+
|
244
|
+
def create_module_git(name, branch = "master")
|
245
|
+
git_dir = File.join(@remote_git_dir, name)
|
246
|
+
FileUtils.mkdir_p(git_dir)
|
247
|
+
RIM::git_session(git_dir) do |s|
|
248
|
+
s.execute("git init")
|
249
|
+
s.execute("git checkout -B #{branch}")
|
250
|
+
File.open(File.join(git_dir, "readme.txt"), "w") do |f|
|
251
|
+
f.write("Content.")
|
252
|
+
end
|
253
|
+
s.execute("git add .")
|
254
|
+
s.execute("git commit -m \"Initial commit\"")
|
255
|
+
end
|
256
|
+
return RIM::ModuleInfo.new("file://" + git_dir, name, branch)
|
257
|
+
end
|
258
|
+
|
259
|
+
def create_all_module_git(name, branch = "master")
|
260
|
+
git_dir = File.join(@remote_git_dir, name)
|
261
|
+
FileUtils.mkdir_p(File.join(git_dir,"mod_a"))
|
262
|
+
FileUtils.mkdir_p(File.join(git_dir,"mod_b","src"))
|
263
|
+
RIM::git_session(git_dir) do |s|
|
264
|
+
s.execute("git init")
|
265
|
+
s.execute("git checkout -B #{branch}")
|
266
|
+
File.open(File.join(git_dir, "readme.txt"), "w") do |f|
|
267
|
+
f.write("Content.")
|
268
|
+
end
|
269
|
+
File.open(File.join(git_dir, "mod_a", "file_a.c"), "w") do |f|
|
270
|
+
f.write("Content.")
|
271
|
+
end
|
272
|
+
File.open(File.join(git_dir, "mod_b", "src", "file_b.c"), "w") do |f|
|
273
|
+
f.write("Content.")
|
274
|
+
end
|
275
|
+
s.execute("git add .")
|
276
|
+
s.execute("git commit -m \"Initial commit\"")
|
277
|
+
end
|
278
|
+
return git_dir
|
279
|
+
end
|
280
|
+
|
281
|
+
def path_from_module_info(module_info)
|
282
|
+
module_info.remote_url.gsub(/^file:\/\//, "")
|
283
|
+
end
|
284
|
+
|
285
|
+
def check_not_dirty(session)
|
286
|
+
status = RIM::StatusBuilder.new.rev_status(session, "HEAD")
|
287
|
+
status.modules.each do |m|
|
288
|
+
assert !m.dirty?
|
289
|
+
end
|
290
|
+
end
|
291
|
+
|
292
|
+
def has_ancestor?(session, rev, ancestor)
|
293
|
+
rev = session.execute("git rev-list #{rev}").include?(session.rev_sha1(ancestor))
|
294
|
+
end
|
295
|
+
|
296
|
+
end
|