svnx 1.0.1 → 2.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (87) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/.glarkrc +1 -0
  4. data/Features.txt +7 -0
  5. data/Gemfile +4 -0
  6. data/History.txt +4 -0
  7. data/LICENSE +20 -0
  8. data/Manifest.txt +0 -0
  9. data/README.md +12 -0
  10. data/Rakefile +12 -0
  11. data/lib/svnx/base/action.rb +57 -52
  12. data/lib/svnx/base/cmdline.rb +58 -0
  13. data/lib/svnx/base/command.rb +49 -41
  14. data/lib/svnx/base/entries.rb +46 -45
  15. data/lib/svnx/base/entry.rb +51 -38
  16. data/lib/svnx/base/env.rb +26 -0
  17. data/lib/svnx/base/options.rb +25 -0
  18. data/lib/svnx/cat/command.rb +3 -64
  19. data/lib/svnx/cat/options.rb +28 -0
  20. data/lib/svnx/commit/command.rb +9 -0
  21. data/lib/svnx/commit/options.rb +29 -0
  22. data/lib/svnx/diff/command.rb +17 -0
  23. data/lib/svnx/diff/elements.rb +84 -0
  24. data/lib/svnx/diff/options.rb +35 -0
  25. data/lib/svnx/diff/parser.rb +105 -0
  26. data/lib/svnx/info/command.rb +4 -47
  27. data/lib/svnx/info/entries.rb +6 -8
  28. data/lib/svnx/info/entry.rb +21 -23
  29. data/lib/svnx/info/options.rb +28 -0
  30. data/lib/svnx/io/directory.rb +9 -5
  31. data/lib/svnx/io/element.rb +93 -95
  32. data/lib/svnx/log/command.rb +7 -3
  33. data/lib/svnx/log/entries.rb +17 -14
  34. data/lib/svnx/log/entry.rb +61 -49
  35. data/lib/svnx/log/options.rb +31 -0
  36. data/lib/svnx/merge/command.rb +9 -0
  37. data/lib/svnx/merge/options.rb +34 -0
  38. data/lib/svnx/project.rb +74 -0
  39. data/lib/svnx/propget/command.rb +9 -0
  40. data/lib/svnx/propget/entries.rb +15 -0
  41. data/lib/svnx/propget/entry.rb +23 -0
  42. data/lib/svnx/propget/options.rb +31 -0
  43. data/lib/svnx/propset/command.rb +9 -0
  44. data/lib/svnx/propset/options.rb +33 -0
  45. data/lib/svnx/revision/argfactory.rb +2 -2
  46. data/lib/svnx/revision/argument.rb +7 -3
  47. data/lib/svnx/revision/date.rb +27 -0
  48. data/lib/svnx/revision/error.rb +2 -2
  49. data/lib/svnx/revision/range.rb +5 -2
  50. data/lib/svnx/status/command.rb +4 -42
  51. data/lib/svnx/status/entries.rb +11 -12
  52. data/lib/svnx/status/entry.rb +43 -41
  53. data/lib/svnx/status/options.rb +28 -0
  54. data/lib/svnx/update/command.rb +9 -0
  55. data/lib/svnx/update/options.rb +25 -0
  56. data/lib/svnx/util/dateutil.rb +35 -0
  57. data/lib/svnx/util/objutil.rb +14 -0
  58. data/lib/{svnx.rb → svnx/version.rb} +2 -2
  59. data/lib/system/command/arg.rb +6 -5
  60. data/lib/system/command/cachefile.rb +29 -21
  61. data/lib/system/command/caching.rb +12 -25
  62. data/lib/system/command/line.rb +41 -30
  63. data/svnx.gemspec +34 -0
  64. metadata +85 -61
  65. data/lib/svnx/base/args.rb +0 -24
  66. data/lib/svnx/log/args.rb +0 -57
  67. data/lib/svnx/log/exec.rb +0 -27
  68. data/lib/svnx/log/line.rb +0 -42
  69. data/test/integration/info/info_test.rb +0 -21
  70. data/test/integration/log/log_test.rb +0 -74
  71. data/test/integration/status/status_test.rb +0 -35
  72. data/test/integration/svnx/io/element_test.rb +0 -235
  73. data/test/unit/svnx/base/action_test.rb +0 -49
  74. data/test/unit/svnx/cat/command_test.rb +0 -55
  75. data/test/unit/svnx/info/entries_test.rb +0 -22
  76. data/test/unit/svnx/log/args_test.rb +0 -15
  77. data/test/unit/svnx/log/entries_test.rb +0 -87
  78. data/test/unit/svnx/log/entry_test.rb +0 -15
  79. data/test/unit/svnx/log/exec_test.rb +0 -15
  80. data/test/unit/svnx/log/line_test.rb +0 -14
  81. data/test/unit/svnx/revision/argfactory_test.rb +0 -50
  82. data/test/unit/svnx/revision/argument_test.rb +0 -167
  83. data/test/unit/svnx/revision/range_test.rb +0 -48
  84. data/test/unit/svnx/status/entries_test.rb +0 -20
  85. data/test/unit/system/command/cachefile_test.rb +0 -52
  86. data/test/unit/system/command/caching_test.rb +0 -92
  87. data/test/unit/system/command/line_test.rb +0 -63
data/lib/svnx/log/exec.rb DELETED
@@ -1,27 +0,0 @@
1
- #!/usr/bin/ruby -w
2
- # -*- ruby -*-
3
-
4
- require 'system/command/line'
5
- require 'system/command/caching'
6
- require 'svnx/base/command'
7
- require 'logue/loggable'
8
- require 'svnx/log/args'
9
- require 'svnx/log/entries'
10
- require 'svnx/log/line'
11
-
12
- module SvnLog
13
- class Exec
14
- attr_reader :entries
15
-
16
- def initialize args
17
- cmd = SVNx::LogCommand.new Args.new(args)
18
- entcls = args[:entries_class] || SVNx::Log::Entries
19
- @entries = entcls.new :xmllines => cmd.execute
20
- end
21
- end
22
- end
23
-
24
- module SVNx
25
- class LogExec < SvnLog::Exec
26
- end
27
- end
data/lib/svnx/log/line.rb DELETED
@@ -1,42 +0,0 @@
1
- #!/usr/bin/ruby -w
2
- # -*- ruby -*-
3
-
4
- require 'system/command/line'
5
- require 'system/command/caching'
6
- require 'svnx/base/command'
7
- require 'svnx/log/args'
8
-
9
- module SvnLog
10
- module LogCmdLine
11
- # this can be either an Array (for which to_a returns itself), or
12
- # a CommandArgs, which also has to_a.
13
- def initialize args = Array.new
14
- super "log", args.to_a
15
- end
16
- end
17
-
18
- class LogCommandLine < SVNx::CommandLine
19
- include LogCmdLine
20
- end
21
-
22
- class LogCommandLineCaching < SVNx::CachingCommandLine
23
- include LogCmdLine
24
- end
25
-
26
- class CommandLine < SVNx::Command
27
- def initialize args
28
- @use_cache = args.use_cache
29
- super
30
- end
31
-
32
- def command_line
33
- cls = @use_cache ? LogCommandLineCaching : LogCommandLine
34
- cls.new @args
35
- end
36
- end
37
- end
38
-
39
- module SVNx
40
- class LogCommand < SvnLog::CommandLine
41
- end
42
- end
@@ -1,21 +0,0 @@
1
- #!/usr/bin/ruby -w
2
- # -*- ruby -*-
3
-
4
- require 'integration/tc'
5
- require 'svnx/info/command'
6
- require 'svnx/info/entry'
7
-
8
- module SVNx::Info
9
- class CommandTestCase < SVNx::IntegrationTestCase
10
- def test_specified_args
11
- entry = SVNx::InfoExec.new(path: '/Programs/pvn/pvntestbed.from', revision: nil, limit: nil, verbose: true, use_cache: false).entry
12
-
13
- assert_not_nil entry
14
- assert_equal 'dir', entry.kind
15
- assert_equal '/Programs/pvn/pvntestbed.from', entry.path
16
- assert_equal '22', entry.revision
17
- assert_equal 'file:///Programs/Subversion/Repositories/pvntestbed.from', entry.root
18
- assert_equal 'file:///Programs/Subversion/Repositories/pvntestbed.from', entry.url
19
- end
20
- end
21
- end
@@ -1,74 +0,0 @@
1
- #!/usr/bin/ruby -w
2
- # -*- ruby -*-
3
-
4
- require 'integration/tc'
5
- require 'svnx/log/command'
6
- require 'svnx/log/entries'
7
-
8
- module SVNx::Log
9
- class CommandTestCase < SVNx::IntegrationTestCase
10
- def assert_entry exp_revision, exp_author, exp_npaths, entries, idx
11
- assert_equal exp_revision, entries[idx].revision
12
- assert_equal exp_author, entries[idx].author
13
- assert_equal exp_npaths, entries[idx].paths.size
14
- end
15
-
16
- def test_specified_args
17
- entries = SVNx::LogExec.new(path: '/Programs/pvn/pvntestbed.from', revision: nil, limit: nil, verbose: true, use_cache: false).entries
18
-
19
- assert_equal 22, entries.size
20
-
21
- assert_entry '21', 'Governor William J. Le Petomane', 3, entries, 1
22
- assert_entry '1', 'Gabby Johnson', 1, entries, 21
23
- end
24
-
25
- def test_default_args
26
- entries = SVNx::LogExec.new(path: '/Programs/pvn/pvntestbed.from').entries
27
-
28
- assert_equal 22, entries.size
29
-
30
- assert_entry '21', 'Governor William J. Le Petomane', 0, entries, 1
31
- assert_entry '1', 'Gabby Johnson', 0, entries, 21
32
- end
33
-
34
- def test_non_verbose
35
- entries = SVNx::LogExec.new(path: '/Programs/pvn/pvntestbed.from', verbose: false).entries
36
-
37
- assert_equal 22, entries.size
38
-
39
- assert_entry '21', 'Governor William J. Le Petomane', 0, entries, 1
40
- assert_entry '1', 'Gabby Johnson', 0, entries, 21
41
- end
42
-
43
- def test_revision
44
- entries = SVNx::LogExec.new(path: '/Programs/pvn/pvntestbed.from', revision: '1:15').entries
45
-
46
- assert_equal 15, entries.size
47
-
48
- assert_entry '2', 'Harriet Johnson', 0, entries, 1
49
- assert_entry '15','Mongo', 0, entries, 14
50
- end
51
-
52
- def test_limit
53
- entries = SVNx::LogExec.new(path: '/Programs/pvn/pvntestbed.from', limit: 5).entries
54
-
55
- assert_equal 5, entries.size
56
-
57
- assert_entry '22', 'Lyle', 0, entries, 0
58
- assert_entry '18', 'Lili von Shtupp', 0, entries, 4
59
- end
60
-
61
- def test_default_entries_class
62
- logexec = SVNx::LogExec.new(path: '/Programs/pvn/pvntestbed.from', revision: nil, limit: nil, verbose: true, use_cache: false)
63
- assert_instance_of SVNx::Log::Entries, logexec.entries
64
- end
65
-
66
- class LogTestEntries < SVNx::Log::Entries
67
- end
68
-
69
- def test_specified_entries_class
70
- logexec = SVNx::LogExec.new(path: '/Programs/pvn/pvntestbed.from', revision: nil, limit: nil, verbose: true, use_cache: false, entries_class: LogTestEntries)
71
- assert_instance_of LogTestEntries, logexec.entries
72
- end
73
- end
74
- end
@@ -1,35 +0,0 @@
1
- #!/usr/bin/ruby -w
2
- # -*- ruby -*-
3
-
4
- require 'integration/tc'
5
- require 'svnx/status/command'
6
- require 'svnx/status/entries'
7
-
8
- module SVNx::Status
9
- class CommandTestCase < SVNx::IntegrationTestCase
10
- def assert_entry exp_cmt_rev, exp_path, exp_status, exp_st_rev, entries, idx
11
- entry = entries[idx]
12
- msg = "entry[#{idx}]: #{entry.path}"
13
-
14
- assert_equal exp_path, entry.path, msg
15
- assert_equal exp_cmt_rev, entry.commit_revision, msg
16
- assert_equal exp_status.to_s, entry.status.to_s, msg
17
- assert_equal exp_st_rev, entry.status_revision, msg
18
- end
19
-
20
- def test_specified_args
21
- entries = SVNx::StatusExec.new(path: '/Programs/pvn/pvntestbed.pending', use_cache: false).entries
22
-
23
- assert_not_nil entries
24
- assert_equal 5, entries.size
25
-
26
- sentries = entries.sort { |a, b| a.path <=> b.path }
27
-
28
- assert_entry '13', '/Programs/pvn/pvntestbed.pending/FirstFile.txt', 'modified', '22', sentries, 0
29
- assert_entry nil, '/Programs/pvn/pvntestbed.pending/SeventhFile.txt', 'added', '-1', sentries, 1
30
- assert_entry '9', '/Programs/pvn/pvntestbed.pending/dirzero/SixthFile.txt', 'deleted', '22', sentries, 2
31
- assert_entry nil, '/Programs/pvn/pvntestbed.pending/src/java/Charlie.java', 'unversioned', nil, sentries, 3
32
- assert_entry nil, '/Programs/pvn/pvntestbed.pending/src/ruby/dog.rb', 'added', '-1', sentries, 4
33
- end
34
- end
35
- end
@@ -1,235 +0,0 @@
1
- #!/usr/bin/ruby -w
2
- # -*- ruby -*-
3
-
4
- require 'integration/tc'
5
- require 'svnx/io/element'
6
-
7
- module SVNx::IO
8
- class ElementTestCase < SVNx::IntegrationTestCase
9
- PENDING_PATH = '/Programs/pvn/pvntestbed.pending'
10
-
11
- def test_init
12
- el = Element.new local: PENDING_PATH
13
- assert_equal PENDING_PATH, el.local.to_path
14
- end
15
-
16
- def test_exists
17
- el = Element.new local: PENDING_PATH
18
- assert el.exist?
19
- end
20
-
21
- def test_does_not_exist
22
- el = Element.new local: '/Programs/pvn/nosuchdirectory'
23
- assert !el.exist?
24
- end
25
-
26
- def test_is_directory
27
- el = Element.new local: PENDING_PATH + '/text'
28
- assert el.directory?
29
- end
30
-
31
- def test_is_not_directory
32
- el = Element.new local: PENDING_PATH + '/FirstFile.txt'
33
- assert !el.directory?
34
- end
35
-
36
- def test_is_file
37
- el = Element.new local: PENDING_PATH + '/FirstFile.txt'
38
- assert el.file?
39
- end
40
-
41
- def test_is_not_file
42
- el = Element.new local: PENDING_PATH + '/text'
43
- assert !el.file?
44
- end
45
-
46
- def test_get_info_has_info
47
- el = Element.new local: PENDING_PATH + '/FirstFile.txt'
48
- inf = el.get_info
49
- assert_equal 'file', inf.kind
50
- assert_equal 'FirstFile.txt', inf.path
51
- assert_equal '22', inf.revision
52
- assert_equal 'file:///Programs/Subversion/Repositories/pvntestbed.from', inf.root
53
- assert_equal 'file:///Programs/Subversion/Repositories/pvntestbed.from/FirstFile.txt', inf.url
54
- end
55
-
56
- def test_get_info_no_info
57
- el = Element.new local: PENDING_PATH + '/src/java/Charlie.java'
58
- assert_nil el.get_info
59
- end
60
-
61
- def test_is_in_svn_up_to_date
62
- el = Element.new local: PENDING_PATH + '/src/java/Alpha.java'
63
- assert el.in_svn?
64
- end
65
-
66
- def test_is_in_svn_modified
67
- el = Element.new local: PENDING_PATH + '/FirstFile.java'
68
- assert el.in_svn?
69
- end
70
-
71
- def test_not_in_svn
72
- el = Element.new local: PENDING_PATH + '/src/java/Charlie.java'
73
- assert !el.in_svn?
74
- end
75
-
76
- def assert_status_entry idx, exp, entries
77
- entry = entries[idx]
78
- msg = "entry \##{idx}"
79
- assert_equal exp[:path], entry.path, msg
80
- assert_equal exp[:name], entry.name, msg
81
- assert_equal exp[:status], entry.status.to_s, msg
82
- end
83
-
84
- def run_local_test expected, status
85
- el = Element.new local: PENDING_PATH
86
- entries = el.find_entries status: status
87
- assert_equal expected.size, entries.size
88
- expected.each_with_index do |exp, idx|
89
- assert_status_entry idx, exp, entries
90
- end
91
- end
92
-
93
- def create_status_expected name, status
94
- { path: PENDING_PATH + name, name: name, status: status }
95
- end
96
-
97
- def test_find_modified_local_entries
98
- expected = Array.new
99
- expected << create_status_expected('/FirstFile.txt', 'modified')
100
- run_local_test expected, :modified
101
- end
102
-
103
- def test_find_added_local_entries
104
- expected = Array.new
105
- expected << create_status_expected('/SeventhFile.txt', 'added')
106
- expected << create_status_expected('/src/ruby/dog.rb', 'added')
107
- run_local_test expected, :added
108
- end
109
-
110
- def test_find_deleted_local_entries
111
- expected = Array.new
112
- expected << create_status_expected('/dirzero/SixthFile.txt', 'deleted')
113
- run_local_test expected, :deleted
114
- end
115
-
116
- def test_find_unversioned_local_entries
117
- expected = Array.new
118
- expected << create_status_expected('/src/java/Charlie.java', 'unversioned')
119
- run_local_test expected, :unversioned
120
- end
121
-
122
- def assert_log_entry expname, expaction, entry
123
- assert_equal expname, entry.name
124
- assert_equal expaction, entry.action.to_s
125
- end
126
-
127
- def test_find_modified_remote_entries
128
- el = Element.new local: PENDING_PATH
129
- entries = el.find_entries revision: '20:22', status: :modified
130
- assert_equal 3, entries.size
131
- assert_log_entry '/SecondFile.txt', 'modified', entries[0]
132
- assert_log_entry '/SecondFile.txt', 'modified', entries[1]
133
- assert_log_entry '/src/ruby/charlie.rb', 'modified', entries[2]
134
- end
135
-
136
- def assert_paths_equal exppath, path
137
- assert_equal exppath[:name], path.name
138
- assert_equal exppath[:action], path.action.to_s
139
- assert_equal exppath[:kind], path.kind
140
- end
141
-
142
- def assert_log_entries expected, entries, idx
143
- msg = "entry \##{idx}"
144
- assert_equal expected[idx][:author], entries[idx].author, msg
145
- assert_equal expected[idx][:date], entries[idx].date, msg
146
- assert_equal expected[idx][:author], entries[idx].author, msg
147
- assert_equal expected[idx][:revision], entries[idx].revision, msg
148
- expected[idx][:paths].each_with_index do |exppath, ix|
149
- assert_paths_equal exppath, entries[idx].paths[ix]
150
- end
151
- end
152
-
153
- def test_log_entries_no_revision
154
- el = Element.new local: PENDING_PATH + '/FirstFile.txt'
155
- # these are entries of entries
156
- entries = el.log_entries
157
- assert_equal 5, entries.size
158
-
159
- expected = Array.new
160
- expected << { author: 'Jim',
161
- date: '2012-09-16T13:51:55.741762Z',
162
- msg: "We're not sure. Are we...black?",
163
- revision: '13',
164
- paths: [
165
- { action: 'modified', kind: 'file', name: '/FirstFile.txt' },
166
- { action: 'added', kind: 'file', name: '/SecondFile.txt' }
167
- ]
168
- }
169
-
170
- assert_log_entries expected, entries, 0
171
-
172
- expected << { author: 'Lyle',
173
- date: '2012-09-15T17:30:36.869900Z',
174
- msg: 'Send wire, main office, tell them I said "ow". Gotcha!',
175
- revision: '5',
176
- paths: [
177
- { action: 'modified', kind: 'file', name: '/FirstFile.txt' },
178
- { action: 'modified', kind: 'file', name: '/SecondFile.txt' }
179
- ]
180
- }
181
-
182
- assert_log_entries expected, entries, 1
183
- end
184
-
185
- def test_cat_no_revision
186
- el = Element.new local: PENDING_PATH + '/FirstFile.txt'
187
-
188
- expected = Array.new
189
- expected << "this is the second line of the first file.\n"
190
- expected << "third line here.\n"
191
- expected << "fourth line this is.\n"
192
-
193
- lines = el.cat
194
- assert_equal expected, lines
195
- end
196
-
197
- def test_cat_valid_revision
198
- el = Element.new local: PENDING_PATH + '/FirstFile.txt'
199
-
200
- expected = Array.new
201
- expected << "This is the first line of the first file in the testbed.\n"
202
- expected << "This is the second line of the first file.\n"
203
-
204
- lines = el.cat revision: 2
205
-
206
- assert_equal expected, lines
207
- end
208
-
209
- def test_cat_invalid_revision
210
- el = Element.new local: PENDING_PATH + '/FirstFile.txt'
211
- assert_raises(RuntimeError) do
212
- el.cat revision: 41
213
- end
214
- end
215
-
216
- def test_to_s
217
- el = Element.new local: PENDING_PATH + '/FirstFile.txt'
218
- assert_equal "svn => ; local => #{PENDING_PATH}/FirstFile.txt", el.to_s
219
- end
220
-
221
- def assert_comparable expected, x, y
222
- assert_equal expected, x <=> y
223
- end
224
-
225
- def test_comparable
226
- a = Element.new local: PENDING_PATH + '/A.txt'
227
- b0 = Element.new local: PENDING_PATH + '/B.txt'
228
- b1 = Element.new local: PENDING_PATH + '/B.txt'
229
-
230
- assert_comparable(-1, a, b0)
231
- assert_comparable( 1, b0, a)
232
- assert_comparable( 0, b0, b1)
233
- end
234
- end
235
- end
@@ -1,49 +0,0 @@
1
- #!/usr/bin/ruby -w
2
- # -*- ruby -*-
3
-
4
- require 'tc'
5
- require 'svnx/base/action'
6
-
7
- module SVNx
8
- class ActionTestCase < SVNx::TestCase
9
- def assert_action_equals expadd, expdel, expmod, expunver, *vals
10
- vals.each do |val|
11
- action = Action.new val
12
- msg = "value: #{val}"
13
- assert_equal expadd, action.added?, msg
14
- assert_equal expdel, action.deleted?, msg
15
- assert_equal expmod, action.modified?, msg
16
- assert_equal expunver, action.unversioned?, msg
17
- end
18
- end
19
-
20
- def test_added
21
- assert_action_equals true, false, false, false, 'added', 'A'
22
- end
23
-
24
- def test_deleted
25
- assert_action_equals false, true, false, false, 'deleted', 'D'
26
- end
27
-
28
- def test_modified
29
- assert_action_equals false, false, true, false, 'modified', 'M'
30
- end
31
-
32
- def test_unversioned
33
- assert_action_equals false, false, false, true, 'unversioned', '?'
34
- end
35
-
36
- def test_constants
37
- assert_equal SVNx::Action.new('added'), SVNx::Action::ADDED
38
- assert_equal SVNx::Action.new('deleted'), SVNx::Action::DELETED
39
- assert_equal SVNx::Action.new('modified'), SVNx::Action::MODIFIED
40
- assert_equal SVNx::Action.new('unversioned'), SVNx::Action::UNVERSIONED
41
- end
42
-
43
- def test_invalid_type
44
- assert_raise(RuntimeError) do
45
- SVNx::Action.new('dummy')
46
- end
47
- end
48
- end
49
- end