git-si 0.3.1 → 0.4.0

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.
@@ -0,0 +1,254 @@
1
+ require "git/si/git-control"
2
+ require "git/si/version"
3
+
4
+ describe Git::Si::GitControl do
5
+ describe ".status_command" do
6
+ it "returns the correct git command" do
7
+ expected = "git status --porcelain"
8
+ actual = Git::Si::GitControl.status_command
9
+ expect(actual).to eq(expected)
10
+ end
11
+
12
+ it "includes extra arguments if specified" do
13
+ expected = "git status --porcelain foobar"
14
+ actual = Git::Si::GitControl.status_command( "foobar" )
15
+ expect(actual).to eq(expected)
16
+ end
17
+
18
+ context "when a different binary is set" do
19
+ before do
20
+ Git::Si::GitControl.git_binary = "testbin"
21
+ end
22
+
23
+ after do
24
+ Git::Si::GitControl.git_binary = nil
25
+ end
26
+
27
+ it "uses the different binary" do
28
+ expected = "testbin status --porcelain"
29
+ actual = Git::Si::GitControl.status_command
30
+ expect(actual).to eq(expected)
31
+ end
32
+ end
33
+ end
34
+
35
+ describe ".are_there_changes?" do
36
+ it "returns true if there are changes" do
37
+ data = "
38
+ M test1
39
+ "
40
+ expect(Git::Si::GitControl.are_there_changes?( data )).to be_truthy
41
+ end
42
+
43
+ it "returns true if there are additions" do
44
+ data = "
45
+ A test1
46
+ "
47
+ expect(Git::Si::GitControl.are_there_changes?( data )).to be_truthy
48
+ end
49
+
50
+ it "returns true if there are deletions" do
51
+ data = "
52
+ D test1
53
+ "
54
+ expect(Git::Si::GitControl.are_there_changes?( data )).to be_truthy
55
+ end
56
+
57
+ it "returns true if there are renamed files" do
58
+ data = "
59
+ R test1
60
+ "
61
+ expect(Git::Si::GitControl.are_there_changes?( data )).to be_truthy
62
+ end
63
+
64
+ it "returns true if there are copied files" do
65
+ data = "
66
+ C test1
67
+ "
68
+ expect(Git::Si::GitControl.are_there_changes?( data )).to be_truthy
69
+ end
70
+
71
+ it "returns false if there are no changes" do
72
+ data = "
73
+ ?? testdir/
74
+ "
75
+ expect(Git::Si::GitControl.are_there_changes?( data )).to be_falsey
76
+ end
77
+ end
78
+
79
+ describe ".log_command" do
80
+ it "returns the correct git command" do
81
+ expect( Git::Si::GitControl.log_command ).to eq( "git log" )
82
+ end
83
+
84
+ it "includes extra arguments if specified" do
85
+ expect( Git::Si::GitControl.log_command( "--pretty=%B" ) ).to eq( "git log --pretty=%B" )
86
+ end
87
+
88
+ context "when a different binary is set" do
89
+ before do
90
+ Git::Si::GitControl.git_binary = "testbingit"
91
+ end
92
+
93
+ after do
94
+ Git::Si::GitControl.git_binary = nil
95
+ end
96
+
97
+ it "uses the different binary" do
98
+ expect(Git::Si::GitControl.log_command).to eq("testbingit log")
99
+ end
100
+ end
101
+ end
102
+
103
+ describe ".parse_last_svn_revision" do
104
+ it "returns the correct svn version number" do
105
+ data = "
106
+ git-si 0.4.0 svn update to version 1015
107
+
108
+ some other commit
109
+
110
+ git-si 0.3.0 svn update to version 1014
111
+ "
112
+ expect(Git::Si::GitControl.parse_last_svn_revision( data )).to eq( '1015' )
113
+ end
114
+
115
+ it "returns nil if no version number could be found" do
116
+ expect(Git::Si::GitControl.parse_last_svn_revision( 'foobar' )).to be_nil
117
+ end
118
+ end
119
+
120
+ describe ".add_command" do
121
+ it "raises an error if no files are specified" do
122
+ expect { Git::Si::GitControl.add_command }.to raise_error
123
+ end
124
+
125
+ it "returns the correct command with files" do
126
+ expect( Git::Si::GitControl.add_command( "foobar" ) ).to eq( "git add foobar" )
127
+ end
128
+ end
129
+
130
+ describe ".commit_revision_command" do
131
+ it "raises an error if no version is specified" do
132
+ expect { Git::Si::GitControl.commit_revision_command }.to raise_error
133
+ end
134
+
135
+ it "returns the correct command with the revision" do
136
+ version = Git::Si::Version.version
137
+ expect( Git::Si::GitControl.commit_revision_command( 21356 ) ).to eq( "git commit --allow-empty -am 'git-si #{version} svn update to version 21356'" )
138
+ end
139
+ end
140
+
141
+ describe ".stash_command" do
142
+ it "returns the correct command" do
143
+ expect(Git::Si::GitControl.stash_command).to eq( "git stash" )
144
+ end
145
+ end
146
+
147
+ describe ".unstash_command" do
148
+ it "returns the correct command" do
149
+ expect(Git::Si::GitControl.unstash_command).to eq( "git stash pop" )
150
+ end
151
+ end
152
+
153
+ describe ".rebase_command" do
154
+ it "raises an error if no branch is specified" do
155
+ expect { Git::Si::GitControl.rebase_command }.to raise_error
156
+ end
157
+
158
+ it "returns the correct command with the branch" do
159
+ expect( Git::Si::GitControl.rebase_command( 'master' ) ).to eq( "git rebase 'master'" )
160
+ end
161
+ end
162
+
163
+ describe ".create_branch_command" do
164
+ it "returns the correct command" do
165
+ expect(Git::Si::GitControl.create_branch_command('foo')).to eq( "git branch foo" )
166
+ end
167
+
168
+ it "raises an error if no branch is specified" do
169
+ expect { Git::Si::GitControl.create_branch_command }.to raise_error
170
+ end
171
+ end
172
+
173
+ describe ".delete_branch_command" do
174
+ it "returns the correct command" do
175
+ expect(Git::Si::GitControl.delete_branch_command('foo')).to eq( "git branch -D foo" )
176
+ end
177
+
178
+ it "raises an error if no branch is specified" do
179
+ expect { Git::Si::GitControl.delete_branch_command }.to raise_error
180
+ end
181
+ end
182
+
183
+ describe ".branch_command" do
184
+ it "returns the correct command" do
185
+ expect(Git::Si::GitControl.branch_command).to eq( "git branch" )
186
+ end
187
+ end
188
+
189
+ describe ".parse_current_branch" do
190
+ it "returns the correct branch" do
191
+ data = "
192
+ MIRRORBRANCH
193
+ * master
194
+ "
195
+ expect(Git::Si::GitControl.parse_current_branch( data )).to eq( 'master' )
196
+ end
197
+
198
+ it "returns nil if no branch could be found" do
199
+ expect(Git::Si::GitControl.parse_current_branch( 'foobar' )).to be_nil
200
+ end
201
+ end
202
+
203
+ describe ".checkout_command" do
204
+ it "raises an error if no branch is specified" do
205
+ expect { Git::Si::GitControl.checkout_command }.to raise_error
206
+ end
207
+
208
+ it "returns the correct command with the branch" do
209
+ expect( Git::Si::GitControl.checkout_command( 'master' ) ).to eq( "git checkout master" )
210
+ end
211
+ end
212
+
213
+ describe ".hard_reset_command" do
214
+ it "returns the correct command" do
215
+ expect(Git::Si::GitControl.hard_reset_command).to eq( "git reset --hard HEAD" )
216
+ end
217
+ end
218
+
219
+ describe ".list_file_command" do
220
+ it "raises an error if no filename is specified" do
221
+ expect { Git::Si::GitControl.list_file_command }.to raise_error
222
+ end
223
+
224
+ it "returns the correct command" do
225
+ expect(Git::Si::GitControl.list_file_command('foobar')).to eq( "git ls-files foobar" )
226
+ end
227
+ end
228
+
229
+ describe ".init_command" do
230
+ it "returns the correct command" do
231
+ expect( Git::Si::GitControl.init_command ).to eq( "git init" )
232
+ end
233
+ end
234
+
235
+ describe ".show_branch_command" do
236
+ it "raises an error if no branch is specified" do
237
+ expect { Git::Si::GitControl.show_branch_command }.to raise_error
238
+ end
239
+
240
+ it "returns the correct command with the branch" do
241
+ expect( Git::Si::GitControl.show_branch_command( 'master' ) ).to eq( "git show-ref refs/heads/master" )
242
+ end
243
+ end
244
+
245
+ describe ".delete_command" do
246
+ it "raises an error if no filename is specified" do
247
+ expect { Git::Si::GitControl.delete_command }.to raise_error
248
+ end
249
+
250
+ it "returns the correct command" do
251
+ expect(Git::Si::GitControl.delete_command('foobar')).to eq( "git rm foobar" )
252
+ end
253
+ end
254
+ end
@@ -0,0 +1,37 @@
1
+ require "git/si/git-ignore"
2
+
3
+ describe Git::Si::GitIgnore do
4
+ describe ".ignore_patterns" do
5
+ it "allows .gitignore files" do
6
+ expect( Git::Si::GitIgnore.ignore_patterns ).to include( '!.gitignore' )
7
+ end
8
+ end
9
+
10
+ describe ".get_missing_lines_from" do
11
+ it "returns lines not present in the passed arguments" do
12
+ data = ["svn-commit.*", "*.orig"]
13
+ expect( Git::Si::GitIgnore.get_missing_lines_from( data ) ).to include( '*.log' )
14
+ end
15
+
16
+ it "does not return lines present in the passed arguments" do
17
+ data = ["svn-commit.*", "*.orig"]
18
+ expect( Git::Si::GitIgnore.get_missing_lines_from( data ) ).not_to include( '*.orig' )
19
+ end
20
+
21
+ it "returns an empty array if all the lines are present" do
22
+ data = Git::Si::GitIgnore.ignore_patterns
23
+ expect( Git::Si::GitIgnore.get_missing_lines_from( data ) ).to be_empty
24
+ end
25
+
26
+ it "returns lines not present in the passed arguments from the passed patterns" do
27
+ data = ["foo", "bar"]
28
+ expect( Git::Si::GitIgnore.get_missing_lines_from( data, ['baz'] ) ).to include( 'baz' )
29
+ end
30
+
31
+ it "does not return lines not present in the passed arguments from the passed patterns" do
32
+ data = ["foo", "bar"]
33
+ expect( Git::Si::GitIgnore.get_missing_lines_from( data, ['foo'] ) ).not_to include( 'bar' )
34
+ end
35
+ end
36
+ end
37
+
@@ -0,0 +1,391 @@
1
+ require "git/si/svn-control"
2
+
3
+ describe Git::Si::SvnControl do
4
+ let( :svn_status_output ) {
5
+ "Z foobar
6
+ X foobar
7
+ M foobar.git
8
+ M foobar.swp
9
+ M barfoo
10
+ A something
11
+ D something else
12
+ ? whatever
13
+ " }
14
+
15
+ let( :svn_info_output ) {
16
+ "
17
+ Path: .
18
+ Working Copy Root Path: /path/place
19
+ URL: file:///Users/path/place
20
+ Relative URL: ^/test
21
+ Repository Root: file:///Users/path/place
22
+ Repository UUID: 0101010101
23
+ Revision: 1014
24
+ Node Kind: directory
25
+ Schedule: normal
26
+ Last Changed Author: me
27
+ Last Changed Rev: 1
28
+ " }
29
+
30
+ let( :svn_update_output ) {
31
+ "
32
+ Restored 'bin/tests/importantthing'
33
+ A bin/tests/foobar
34
+ U bin/tests/api/goobar
35
+ G bin/tests/api/special
36
+ U bin/tests/api/anotherfile
37
+ A bin/tests/barfoo
38
+ ? unknownfile.md
39
+ D byefile
40
+ C myimage.png
41
+ D badjs.js
42
+ C something/javascript.js
43
+ A something/newjs.js
44
+ C css/_base.scss
45
+ Updated to revision 113333.
46
+ Resolved conflicted state of 'weirdthing/weird.php'
47
+ " }
48
+
49
+ describe ".status_command" do
50
+ it "returns the correct svn command" do
51
+ expected = "svn status --ignore-externals"
52
+ actual = Git::Si::SvnControl.status_command
53
+ expect(actual).to eq(expected)
54
+ end
55
+
56
+ it "includes extra arguments if specified" do
57
+ expected = "svn status --ignore-externals --verbose"
58
+ actual = Git::Si::SvnControl.status_command( "--verbose" )
59
+ expect(actual).to eq(expected)
60
+ end
61
+
62
+ context "when a different binary is set" do
63
+ before do
64
+ Git::Si::SvnControl.svn_binary = "testbin"
65
+ end
66
+
67
+ after do
68
+ Git::Si::SvnControl.svn_binary = nil
69
+ end
70
+
71
+ it "uses the different binary" do
72
+ expected = "testbin status --ignore-externals"
73
+ actual = Git::Si::SvnControl.status_command
74
+ expect(actual).to eq(expected)
75
+ end
76
+ end
77
+ end
78
+
79
+ describe ".diff_command" do
80
+ it "returns the correct svn command" do
81
+ expected = "svn diff"
82
+ actual = Git::Si::SvnControl.diff_command
83
+ expect(actual).to eq(expected)
84
+ end
85
+
86
+ it "includes extra arguments if specified" do
87
+ expected = "svn diff foobar"
88
+ actual = Git::Si::SvnControl.diff_command( "foobar" )
89
+ expect(actual).to eq(expected)
90
+ end
91
+ end
92
+
93
+ describe ".info_command" do
94
+ it "returns the correct svn command" do
95
+ expected = "svn info"
96
+ actual = Git::Si::SvnControl.info_command
97
+ expect(actual).to eq(expected)
98
+ end
99
+ end
100
+
101
+ describe ".parse_last_revision" do
102
+ it "returns nil from incorrect data" do
103
+ actual = Git::Si::SvnControl.parse_last_revision('foobar 12345')
104
+ expect(actual).to be_nil
105
+ end
106
+
107
+ it "returns the revision number from correct data" do
108
+ expected = "1014"
109
+ actual = Git::Si::SvnControl.parse_last_revision( svn_info_output )
110
+ expect(actual).to eq(expected)
111
+ end
112
+ end
113
+
114
+ describe ".add_command" do
115
+ it "raises an error if no files are specified" do
116
+ expect { Git::Si::SvnControl.add_command }.to raise_error
117
+ end
118
+
119
+ it "returns the correct command with a file" do
120
+ expect( Git::Si::SvnControl.add_command( "foobar" ) ).to eq( "svn add foobar" )
121
+ end
122
+
123
+ it "returns the correct command with an array of files" do
124
+ expect( Git::Si::SvnControl.add_command( ["foobar", "barfoo"] ) ).to eq( "svn add foobar barfoo" )
125
+ end
126
+ end
127
+
128
+ describe ".update_command" do
129
+ it "returns the correct command" do
130
+ expect( Git::Si::SvnControl.update_command ).to eq( "svn up --accept theirs-full --ignore-externals" )
131
+ end
132
+ end
133
+
134
+ describe ".parse_updated_files" do
135
+ it "returns files that have been added" do
136
+ expected = [
137
+ 'bin/tests/foobar',
138
+ 'bin/tests/barfoo'
139
+ ]
140
+ expect( Git::Si::SvnControl.parse_updated_files( svn_update_output ) ).to include( *expected )
141
+ end
142
+
143
+ it "returns files that have been restored" do
144
+ expected = [
145
+ 'bin/tests/importantthing'
146
+ ]
147
+ expect( Git::Si::SvnControl.parse_updated_files( svn_update_output ) ).to include( *expected )
148
+ end
149
+
150
+ it "returns files that are updated" do
151
+ expected = [
152
+ 'bin/tests/api/goobar',
153
+ 'bin/tests/api/special',
154
+ 'bin/tests/api/anotherfile'
155
+ ]
156
+ expect( Git::Si::SvnControl.parse_updated_files( svn_update_output ) ).to include( *expected )
157
+ end
158
+
159
+ it "returns files that are resolved conflicts" do
160
+ expected = [
161
+ 'weirdthing/weird.php'
162
+ ]
163
+ expect( Git::Si::SvnControl.parse_updated_files( svn_update_output ) ).to include( *expected )
164
+ end
165
+
166
+ it "does not return files that are in conflict" do
167
+ expected = [
168
+ 'myimage.png',
169
+ 'css/_base.scss',
170
+ 'something/javascript.js'
171
+ ]
172
+ expect( Git::Si::SvnControl.parse_updated_files( svn_update_output ) ).not_to include( *expected )
173
+ end
174
+
175
+ it "does not return files that are deleted" do
176
+ expected = [
177
+ 'byefile',
178
+ 'badjs.js'
179
+ ]
180
+ expect( Git::Si::SvnControl.parse_updated_files( svn_update_output ) ).not_to include( *expected )
181
+ end
182
+
183
+ it "returns files whose properties have been updated" do
184
+ expected = [
185
+ 'something/newjs.js'
186
+ ]
187
+ expect( Git::Si::SvnControl.parse_updated_files( svn_update_output ) ).to include( *expected )
188
+ end
189
+ end
190
+
191
+ describe ".parse_deleted_files" do
192
+ it "does not return files that are deleted" do
193
+ expected = [
194
+ 'byefile',
195
+ 'badjs.js'
196
+ ]
197
+ expect( Git::Si::SvnControl.parse_deleted_files( svn_update_output ) ).to include( *expected )
198
+ end
199
+ end
200
+
201
+ describe ".parse_conflicted_files" do
202
+ it "returns files that are resolved conflicts" do
203
+ expected = [
204
+ 'weirdthing/weird.php'
205
+ ]
206
+ expect( Git::Si::SvnControl.parse_conflicted_files( svn_update_output ) ).to include( *expected )
207
+ end
208
+
209
+ it "returns files which have conflicts" do
210
+ expected = [
211
+ 'myimage.png',
212
+ 'css/_base.scss',
213
+ 'something/javascript.js'
214
+ ]
215
+ expect( Git::Si::SvnControl.parse_conflicted_files( svn_update_output ) ).to include( *expected )
216
+ end
217
+ end
218
+
219
+ describe ".parse_unknown_files" do
220
+ it "returns files that are not tracked" do
221
+ expected = [
222
+ 'unknownfile.md'
223
+ ]
224
+ expect( Git::Si::SvnControl.parse_unknown_files( svn_update_output ) ).to include( *expected )
225
+ end
226
+
227
+ it "does not return files that are tracked" do
228
+ expected = [
229
+ 'myimage.png',
230
+ 'css/_base.scss',
231
+ 'something/javascript.js'
232
+ ]
233
+ expect( Git::Si::SvnControl.parse_unknown_files( svn_update_output ) ).not_to include( *expected )
234
+ end
235
+ end
236
+
237
+ describe ".revert_command" do
238
+ it "returns the correct command for all files" do
239
+ expect( Git::Si::SvnControl.revert_command ).to eq('svn revert -R .')
240
+ end
241
+
242
+ it "returns the correct command for some files" do
243
+ expect( Git::Si::SvnControl.revert_command(['foobar', 'barfoo']) ).to eq('svn revert -R foobar barfoo')
244
+ end
245
+ end
246
+
247
+ describe ".commit_command" do
248
+ it "returns the correct command for all files" do
249
+ expect( Git::Si::SvnControl.commit_command ).to eq('svn commit')
250
+ end
251
+
252
+ it "returns the correct command for some files" do
253
+ expect( Git::Si::SvnControl.commit_command(['foobar', 'barfoo']) ).to eq('svn commit foobar barfoo')
254
+ end
255
+ end
256
+
257
+ describe ".blame_command" do
258
+ it "raises an error with no files" do
259
+ expect { Git::Si::SvnControl.blame_command }.to raise_error
260
+ end
261
+
262
+ it "returns the correct command" do
263
+ expect( Git::Si::SvnControl.blame_command('foobar') ).to eq( 'svn blame foobar' )
264
+ end
265
+ end
266
+
267
+ describe ".parse_root_path" do
268
+ it "raises an error with no data" do
269
+ expect { Git::Si::SvnControl.parse_root_path }.to raise_error
270
+ end
271
+
272
+ it "returns the correct root path" do
273
+ data = "
274
+ Path: .
275
+ Working Copy Root Path: /Users/foobar/git-si/testdir/test-copy
276
+ URL: file:///Users/foobar/git-si/testdir/SVNrep/test
277
+ Relative URL: ^/test
278
+ Repository Root: file:///Users/foobar/git-si/testdir/SVNrep
279
+ Repository UUID: 0101010101
280
+ Revision: 1432
281
+ "
282
+ expect( Git::Si::SvnControl.parse_root_path(data) ).to eq( '/Users/foobar/git-si/testdir/test-copy' )
283
+ end
284
+ end
285
+
286
+ describe ".list_file_command" do
287
+ it "returns the correct command" do
288
+ expect( Git::Si::SvnControl.list_file_command ).to eq( 'svn list -R' )
289
+ end
290
+ end
291
+
292
+ describe ".parse_file_list" do
293
+ let ( :svn_list_output ) { "
294
+ .hiddenfile
295
+ .hiddendir/
296
+ .hiddendir/regularfile.txt
297
+ myimage.png
298
+ something/
299
+ something/.subhidden/
300
+ something/.subhidden/regularfile.txt
301
+ something/javascript.js
302
+ " }
303
+
304
+ it "returns files in the list" do
305
+ expected = [
306
+ 'myimage.png',
307
+ 'something/javascript.js'
308
+ ]
309
+ expect( Git::Si::SvnControl.parse_file_list( svn_list_output ) ).to include( *expected )
310
+ end
311
+
312
+ it "does not return directories" do
313
+ expected = [
314
+ 'something/'
315
+ ]
316
+ expect( Git::Si::SvnControl.parse_file_list( svn_list_output ) ).not_to include( *expected )
317
+ end
318
+
319
+ it "does not return empty strings" do
320
+ expected = [
321
+ '',
322
+ ' ',
323
+ ]
324
+ expect( Git::Si::SvnControl.parse_file_list( svn_list_output ) ).not_to include( *expected )
325
+ end
326
+
327
+ it "does not return hidden files or files in hidden directories" do
328
+ expected = [
329
+ '.hiddenfile',
330
+ '.hiddendir/regularfile.txt',
331
+ 'something/.subhidden/regularfile.txt'
332
+ ]
333
+ expect( Git::Si::SvnControl.parse_file_list( svn_list_output ) ).not_to include( *expected )
334
+ end
335
+ end
336
+
337
+ describe ".parse_external_repos" do
338
+ it "includes lines beginning with 'X'" do
339
+ expected = [ 'foobar' ]
340
+ actual = Git::Si::SvnControl.parse_external_repos( svn_status_output )
341
+ expect(actual).to include(*expected)
342
+ end
343
+
344
+ it "excludes lines starting with 'M'" do
345
+ expected = [ 'barfoo' ]
346
+ actual = Git::Si::SvnControl.parse_external_repos( svn_status_output )
347
+ expect(actual).not_to include(expected)
348
+ end
349
+ end
350
+
351
+ describe ".parse_svn_status" do
352
+ it "excludes lines beginning with 'X'" do
353
+ expected = 'X foobar'
354
+ actual = Git::Si::SvnControl.parse_svn_status( svn_status_output )
355
+ expect(actual).to_not include(expected)
356
+ end
357
+
358
+ it "excludes lines ending with '.git'" do
359
+ expected = 'foobar.git'
360
+ actual = Git::Si::SvnControl.parse_svn_status( svn_status_output )
361
+ expect(actual).to_not include(expected)
362
+ end
363
+
364
+ it "excludes lines ending with '.swp'" do
365
+ expected = 'foobar.swp'
366
+ actual = Git::Si::SvnControl.parse_svn_status( svn_status_output )
367
+ expect(actual).to_not include(expected)
368
+ end
369
+
370
+ it "includes lines starting with 'M'" do
371
+ expected = 'M barfoo'
372
+ actual = Git::Si::SvnControl.parse_svn_status( svn_status_output )
373
+ expect(actual).to include(expected)
374
+ end
375
+
376
+ it "includes lines starting with 'A'" do
377
+ expected = 'A something'
378
+ actual = Git::Si::SvnControl.parse_svn_status( svn_status_output )
379
+ expect(actual).to include(expected)
380
+ end
381
+
382
+ it "includes lines starting with '?'" do
383
+ expected = '? whatever'
384
+ actual = Git::Si::SvnControl.parse_svn_status( svn_status_output )
385
+ expect(actual).to include(expected)
386
+ end
387
+ end
388
+
389
+ end
390
+
391
+