pvn 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/pvn/app.rb +5 -7
- data/lib/pvn/io/element.rb +61 -1
- data/lib/pvn/revision/entry.rb +3 -0
- data/lib/pvn/subcommands/log/command.rb +0 -2
- data/lib/pvn/subcommands/pct/command.rb +179 -6
- data/lib/pvn/subcommands/pct/options.rb +16 -0
- data/lib/pvn/subcommands/revision/multiple_revisions_option.rb +1 -7
- data/lib/pvn/subcommands/revision/revision_option.rb +3 -0
- data/lib/pvn/subcommands/revision/revision_regexp_option.rb +2 -7
- data/lib/pvn.rb +1 -1
- data/lib/svnx/cat/command.rb +46 -0
- data/lib/svnx/command.rb +15 -2
- data/lib/svnx/entries.rb +60 -0
- data/lib/svnx/entry.rb +24 -0
- data/lib/svnx/info/command.rb +9 -2
- data/lib/svnx/info/entries.rb +8 -16
- data/lib/svnx/info/entry.rb +17 -16
- data/lib/svnx/log/command.rb +0 -4
- data/lib/svnx/log/entries.rb +6 -45
- data/lib/svnx/log/entry.rb +20 -25
- data/lib/svnx/status/command.rb +9 -2
- data/lib/svnx/status/entries.rb +7 -12
- data/lib/svnx/status/entry.rb +20 -17
- data/test/integration/svnx/log/test.rb +2 -2
- data/test/unit/svnx/info/entries_test.rb +22 -0
- data/test/unit/svnx/info/entry_test.rb +2 -30
- data/test/unit/svnx/log/entries_test.rb +20 -5
- data/test/unit/svnx/status/entries_test.rb +20 -0
- data/test/unit/svnx/status/entry_test.rb +1 -3
- metadata +11 -4
data/lib/pvn/app.rb
CHANGED
@@ -9,13 +9,11 @@ require 'pvn/io/element'
|
|
9
9
|
require 'svnx/log/entries'
|
10
10
|
|
11
11
|
require 'pvn/subcommands/log/command'
|
12
|
-
|
13
|
-
# not yet supported:
|
14
|
-
# require 'pvn/subcommands/pct/command'
|
12
|
+
require 'pvn/subcommands/pct/command'
|
15
13
|
|
16
14
|
# the old ones:
|
17
15
|
require 'pvn/diff/diffcmd'
|
18
|
-
require 'pvn/pct/pctcmd'
|
16
|
+
# require 'pvn/pct/pctcmd'
|
19
17
|
require 'pvn/describe'
|
20
18
|
require 'pvn/upp/uppcmd'
|
21
19
|
require 'pvn/wherecmd'
|
@@ -46,8 +44,7 @@ module PVN::App
|
|
46
44
|
when "log"
|
47
45
|
run_command PVN::Subcommands::Log::Command, args
|
48
46
|
when "pct"
|
49
|
-
|
50
|
-
exit(-1)
|
47
|
+
run_command PVN::Subcommands::Pct::Command, args
|
51
48
|
else
|
52
49
|
$stderr.puts "ERROR: subcommand not valid: #{arg}"
|
53
50
|
exit(-1)
|
@@ -62,7 +59,7 @@ module PVN::App
|
|
62
59
|
cmdcls.new args
|
63
60
|
exit(0)
|
64
61
|
rescue => e
|
65
|
-
|
62
|
+
puts e.backtrace
|
66
63
|
$stderr.puts e
|
67
64
|
exit(-1)
|
68
65
|
end
|
@@ -84,6 +81,7 @@ module PVN::App
|
|
84
81
|
end
|
85
82
|
|
86
83
|
SUBCOMMANDS = [ PVN::Subcommands::Log::Command,
|
84
|
+
PVN::Subcommands::Pct::Command,
|
87
85
|
# DiffCommand,
|
88
86
|
# DescribeCommand,
|
89
87
|
# PctCommand,
|
data/lib/pvn/io/element.rb
CHANGED
@@ -62,7 +62,67 @@ module PVN::IO
|
|
62
62
|
end
|
63
63
|
end
|
64
64
|
|
65
|
-
def
|
65
|
+
def get_info
|
66
|
+
cmdargs = SVNx::InfoCommandArgs.new :path => @local
|
67
|
+
infcmd = SVNx::InfoCommand.new cmdargs
|
68
|
+
output = infcmd.execute
|
69
|
+
|
70
|
+
infentries = SVNx::Info::Entries.new :xmllines => output
|
71
|
+
infentries[0]
|
72
|
+
end
|
73
|
+
|
74
|
+
def repo_root
|
75
|
+
get_info.root
|
76
|
+
end
|
77
|
+
|
78
|
+
# returns a set of entries modified over the given revision
|
79
|
+
def find_modified_entries revision
|
80
|
+
cmdargs = Hash.new
|
81
|
+
|
82
|
+
cmdargs[:path] = @local
|
83
|
+
|
84
|
+
info "cmdargs[:revision]: #{cmdargs[:revision]}"
|
85
|
+
|
86
|
+
# we can't cache this, because we don't know if there has been an svn
|
87
|
+
# update since the previous run:
|
88
|
+
cmdargs[:use_cache] = false
|
89
|
+
cmdargs[:limit] = nil
|
90
|
+
cmdargs[:verbose] = true
|
91
|
+
cmdargs[:revision] = revision
|
92
|
+
|
93
|
+
logargs = SVNx::LogCommandArgs.new cmdargs
|
94
|
+
entries = log(logargs).entries
|
95
|
+
|
96
|
+
modified = Set.new
|
97
|
+
|
98
|
+
info "entries: #{entries}"
|
99
|
+
entries.each do |entry|
|
100
|
+
info "entry: #{entry}".on_blue
|
101
|
+
info entry.paths
|
102
|
+
entry.paths.each do |epath|
|
103
|
+
modified << epath if epath.action == 'M'
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
modified
|
108
|
+
end
|
109
|
+
|
110
|
+
# returns a set of local files that are in the given status
|
111
|
+
def find_files_by_status status
|
112
|
+
cmdargs = SVNx::StatusCommandArgs.new :path => @local, :use_cache => false
|
113
|
+
|
114
|
+
cmd = SVNx::StatusCommand.new cmdargs
|
115
|
+
xml = cmd.execute
|
116
|
+
entries = SVNx::Status::Entries.new :xmllines => xml
|
117
|
+
|
118
|
+
entries.select do |entry|
|
119
|
+
entry.status == status
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
# returns a set of local files that are in modified status
|
124
|
+
def find_modified_files
|
125
|
+
find_files_by_status 'modified'
|
66
126
|
end
|
67
127
|
|
68
128
|
# returns log entries
|
data/lib/pvn/revision/entry.rb
CHANGED
@@ -3,6 +3,9 @@
|
|
3
3
|
|
4
4
|
require 'svnx/log/entries'
|
5
5
|
|
6
|
+
# This is an abuse of all the element/entry nonsense in this code. This will
|
7
|
+
# replace lib/pvn/revision.rb as PVN::Revision.
|
8
|
+
|
6
9
|
module PVN::Revision
|
7
10
|
DATE_REGEXP = Regexp.new '^\{(.*?)\}'
|
8
11
|
SVN_REVISION_WORDS = %w{ HEAD BASE COMMITTED PREV }
|
@@ -9,11 +9,9 @@ require 'pvn/subcommands/base/command'
|
|
9
9
|
|
10
10
|
module PVN::Subcommands::Log
|
11
11
|
class Command < PVN::Subcommands::Base::Command
|
12
|
-
include Loggable
|
13
12
|
|
14
13
|
DEFAULT_LIMIT = 15
|
15
14
|
|
16
|
-
description "this is a description of log"
|
17
15
|
subcommands [ "log" ]
|
18
16
|
description "Print log messages for the given files."
|
19
17
|
usage "[OPTIONS] FILE..."
|
@@ -1,15 +1,188 @@
|
|
1
1
|
#!/usr/bin/ruby -w
|
2
2
|
# -*- ruby -*-
|
3
3
|
|
4
|
-
|
4
|
+
require 'pvn/io/element'
|
5
|
+
require 'pvn/subcommands/pct/options'
|
6
|
+
require 'pvn/subcommands/base/command'
|
7
|
+
require 'svnx/info/command'
|
8
|
+
require 'svnx/status/command'
|
9
|
+
require 'svnx/cat/command'
|
10
|
+
require 'set'
|
5
11
|
|
6
|
-
module PVN::
|
7
|
-
class
|
8
|
-
|
12
|
+
module PVN::Subcommands::Pct
|
13
|
+
class DiffCount
|
14
|
+
attr_reader :from
|
15
|
+
attr_reader :to
|
9
16
|
|
17
|
+
def initialize from = 0, to = 0
|
18
|
+
@from = from
|
19
|
+
@to = to
|
20
|
+
end
|
21
|
+
|
22
|
+
def print name
|
23
|
+
diff = to - from
|
24
|
+
diffpct = diff == 0 ? 0 : 100.0 * diff / from
|
25
|
+
|
26
|
+
printf "%8d %8d %8d %8.1f%% %s\n", from, to, diff, diffpct, name
|
27
|
+
end
|
28
|
+
|
29
|
+
def << diff
|
30
|
+
@from += diff.from
|
31
|
+
@to += diff.to
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
class Command < PVN::Subcommands::Base::Command
|
36
|
+
|
37
|
+
DEFAULT_LIMIT = 15
|
38
|
+
|
39
|
+
subcommands [ "pct" ]
|
40
|
+
description "Compares revisions as a percentage of lines modified."
|
41
|
+
usage "[OPTIONS] FILE..."
|
42
|
+
summary [ "Compares to revisions, showing the changes in the size (length)",
|
43
|
+
"of files that have been modified in the latter revision, to",
|
44
|
+
"show the extent to which they have increased or decreased.",
|
45
|
+
"The columns are:",
|
46
|
+
" - length in svn repository",
|
47
|
+
" - length in local version",
|
48
|
+
" - difference",
|
49
|
+
" - percentage change",
|
50
|
+
" - file name",
|
51
|
+
"The total numbers are displayed as the last line.",
|
52
|
+
"Added and deleted files are not included." ]
|
53
|
+
|
54
|
+
optscls
|
55
|
+
|
56
|
+
example "pvn pct foo.rb", "Prints the changes in foo.rb, working copy against BASE."
|
57
|
+
example "pvn pct -r114:121", "Prints the changes for all files, revision 114 against 121. (not yet supported)"
|
58
|
+
example "pvn pct -rHEAD", "Prints the changes, working copy against HEAD. (not yet supported)"
|
59
|
+
example "pvn pct -r117", "Prints the changes between revision 117 and the previous revision. (not yet supported)"
|
60
|
+
example "pvn pct -7", "Prints the changes between relative revision -7 and the previous revision. (not yet supported)"
|
61
|
+
example "pvn pct -r31 -4", "Prints the changes between revision 31 and relative revision -4. (not yet supported)"
|
62
|
+
|
10
63
|
def initialize args
|
11
|
-
|
12
|
-
|
64
|
+
options = PVN::Subcommands::Pct::OptionSet.new
|
65
|
+
options.process args
|
66
|
+
|
67
|
+
return show_help if options.help
|
68
|
+
|
69
|
+
info "options: #{options}"
|
70
|
+
|
71
|
+
path = options.paths[0] || "."
|
72
|
+
cmdargs = Hash.new
|
73
|
+
|
74
|
+
cmdargs[:path] = path
|
75
|
+
|
76
|
+
if options.revision && !options.revision.empty?
|
77
|
+
compare_by_revisions options
|
78
|
+
else
|
79
|
+
compare_local_to_base options
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
### $$$ this belongs in Revision
|
84
|
+
def get_from_to_revisions rev
|
85
|
+
if rev.kind_of? Array
|
86
|
+
if rev.size == 1
|
87
|
+
if md = Regexp.new('(.+):(.+)').match(rev[0])
|
88
|
+
return [ md[1], md[2] ]
|
89
|
+
else
|
90
|
+
return [ (rev[0].to_i - 1).to_s, rev[0] ]
|
91
|
+
end
|
92
|
+
else
|
93
|
+
return [ rev[0], rev[1] ]
|
94
|
+
end
|
95
|
+
else
|
96
|
+
info "rev: #{rev}".bold.white.on_red
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
def compare_by_revisions options
|
101
|
+
# what was modified between the revisions?
|
102
|
+
|
103
|
+
path = options.paths[0] || "."
|
104
|
+
|
105
|
+
elmt = PVN::IO::Element.new :local => path || '.'
|
106
|
+
modified = elmt.find_modified_entries options.revision
|
107
|
+
|
108
|
+
modnames = modified.collect { |m| m.name }
|
109
|
+
|
110
|
+
info "modnames: #{modnames.inspect}".yellow
|
111
|
+
|
112
|
+
rev = options.revision
|
113
|
+
|
114
|
+
info "rev: #{rev}; #{rev.class}".blue.on_yellow
|
115
|
+
info "rev: #{rev.inspect}; #{rev.class}".blue.on_yellow
|
116
|
+
|
117
|
+
fromrev, torev = get_from_to_revisions options.revision
|
118
|
+
|
119
|
+
info "fromrev: #{fromrev}; torev: #{torev}".black.on_green
|
120
|
+
info "fromrev: #{fromrev.class}; torev: #{torev.class}".black.on_green
|
121
|
+
|
122
|
+
total = DiffCount.new
|
123
|
+
|
124
|
+
reporoot = elmt.repo_root
|
125
|
+
|
126
|
+
modnames.each do |mod|
|
127
|
+
info "mod: #{mod}"
|
128
|
+
|
129
|
+
fullpath = reporoot + mod
|
130
|
+
|
131
|
+
from_count = get_line_count fullpath, fromrev
|
132
|
+
info "from_count: #{from_count}".red
|
133
|
+
|
134
|
+
to_count = get_line_count fullpath, torev
|
135
|
+
info "to_count: #{to_count}".red
|
136
|
+
|
137
|
+
dc = DiffCount.new from_count, to_count
|
138
|
+
total << dc
|
139
|
+
dc.print mod
|
140
|
+
end
|
141
|
+
|
142
|
+
total.print 'total'
|
143
|
+
end
|
144
|
+
|
145
|
+
def get_line_count path, revision
|
146
|
+
cmdargs = SVNx::CatCommandArgs.new :path => path, :revision => revision
|
147
|
+
catcmd = SVNx::CatCommand.new cmdargs
|
148
|
+
info "catcmd: #{catcmd}"
|
149
|
+
|
150
|
+
count = catcmd.execute.size
|
151
|
+
info "count: #{count}"
|
152
|
+
|
153
|
+
count
|
154
|
+
end
|
155
|
+
|
156
|
+
def compare_local_to_base options
|
157
|
+
# do we support multiple paths?
|
158
|
+
path = options.paths[0] || '.'
|
159
|
+
|
160
|
+
elmt = PVN::IO::Element.new :local => path || '.'
|
161
|
+
modified = elmt.find_modified_files
|
162
|
+
|
163
|
+
total = DiffCount.new
|
164
|
+
|
165
|
+
modified.each do |entry|
|
166
|
+
catcmd = SVNx::CatCommand.new entry.path
|
167
|
+
info "catcmd: #{catcmd}"
|
168
|
+
|
169
|
+
svn_count = catcmd.execute.size
|
170
|
+
info "svn_count: #{svn_count}"
|
171
|
+
|
172
|
+
local_count = Pathname.new(entry.path).readlines.size
|
173
|
+
info "local_count: #{local_count}"
|
174
|
+
|
175
|
+
dc = DiffCount.new svn_count, local_count
|
176
|
+
total << dc
|
177
|
+
dc.print entry.path
|
178
|
+
end
|
179
|
+
|
180
|
+
total.print 'total'
|
181
|
+
end
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
__END__
|
13
186
|
|
14
187
|
elmt = PVN::IO::Element.new :local => clargs.path || '.'
|
15
188
|
info "elmt: #{elmt}".red
|
@@ -0,0 +1,16 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# -*- ruby -*-
|
3
|
+
|
4
|
+
require 'pvn/subcommands/revision/multiple_revisions_option'
|
5
|
+
require 'pvn/subcommands/base/options'
|
6
|
+
|
7
|
+
module PVN::Subcommands::Pct
|
8
|
+
class OptionSet < PVN::Subcommands::Base::OptionSet
|
9
|
+
has_option :revision, PVN::MultipleRevisionsRegexpOption
|
10
|
+
has_option :help, PVN::Subcommands::Base::HelpOption
|
11
|
+
|
12
|
+
def paths
|
13
|
+
unprocessed
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -6,13 +6,7 @@ require 'pvn/subcommands/revision/revision_regexp_option'
|
|
6
6
|
module PVN
|
7
7
|
# A revision option with multiple values.
|
8
8
|
class MultipleRevisionsRegexpOption < RevisionRegexpOption
|
9
|
-
REVISION_DESCRIPTION = [ "
|
10
|
-
"ARG can be relative, of the form:",
|
11
|
-
" +N : N revisions from the BASE",
|
12
|
-
" -N : N revisions from the HEAD,",
|
13
|
-
" when -1 is the previous revision" ,
|
14
|
-
"Multiple revisions can be specified." ,
|
15
|
-
]
|
9
|
+
REVISION_DESCRIPTION = RevisionRegexpOption::REVISION_DESCRIPTION + [ "Multiple revisions can be specified." ]
|
16
10
|
|
17
11
|
def set_value val
|
18
12
|
currval = value
|
@@ -6,7 +6,7 @@ require 'pvn/subcommands/revision/revision_option'
|
|
6
6
|
module PVN
|
7
7
|
# A revision that is also set by -N and +N.
|
8
8
|
class RevisionRegexpOption < PVN::RevisionOption
|
9
|
-
TAG_RE = Regexp.new
|
9
|
+
TAG_RE = Regexp.new '^(?:([\-\+]\d+)|(-r(.+)))$'
|
10
10
|
|
11
11
|
REVISION_DESCRIPTION = [ "revision to apply.",
|
12
12
|
"ARG can be relative, of the form:",
|
@@ -16,20 +16,15 @@ module PVN
|
|
16
16
|
]
|
17
17
|
|
18
18
|
def initialize revargs = Hash.new
|
19
|
-
# info "revargs: #{revargs}"
|
20
19
|
revargs[:regexp] = TAG_RE
|
21
20
|
super
|
22
21
|
end
|
23
22
|
|
24
23
|
def resolve_value optset, unprocessed
|
25
24
|
val = value
|
26
|
-
|
27
|
-
|
28
|
-
md = TAG_RE.match val
|
29
|
-
# info "md: #{md.inspect}"
|
25
|
+
md = TAG_RE.match val
|
30
26
|
|
31
27
|
if md && md[3]
|
32
|
-
# info "md[3]: #{md[3]}"
|
33
28
|
@value = md[3]
|
34
29
|
end
|
35
30
|
|
data/lib/pvn.rb
CHANGED
@@ -0,0 +1,46 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# -*- ruby -*-
|
3
|
+
|
4
|
+
require 'svnx/command'
|
5
|
+
|
6
|
+
module SVNx
|
7
|
+
class CatCommandLine < CommandLine
|
8
|
+
def initialize args = Array.new
|
9
|
+
super "cat", args.to_a
|
10
|
+
end
|
11
|
+
|
12
|
+
def uses_xml?
|
13
|
+
false
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
class CatCommandArgs < CommandArgs
|
18
|
+
attr_reader :revision
|
19
|
+
attr_reader :use_cache
|
20
|
+
|
21
|
+
def initialize args = Hash.new
|
22
|
+
@use_cache = args[:use_cache].nil? || args[:use_cache]
|
23
|
+
@revision = args[:revision]
|
24
|
+
super
|
25
|
+
end
|
26
|
+
|
27
|
+
def to_a
|
28
|
+
ary = Array.new
|
29
|
+
if @revision
|
30
|
+
@revision.each do |rev|
|
31
|
+
ary << "-r#{rev}"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
if @path
|
36
|
+
ary << @path
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
class CatCommand < Command
|
42
|
+
def command_line
|
43
|
+
CatCommandLine.new @args
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
data/lib/svnx/command.rb
CHANGED
@@ -11,22 +11,35 @@ module SVNx
|
|
11
11
|
class CommandLine < System::CommandLine
|
12
12
|
def initialize subcmd, args = Array.new
|
13
13
|
info "args: #{args}"
|
14
|
-
cmdargs = [ 'svn', subcmd
|
14
|
+
cmdargs = [ 'svn', subcmd ]
|
15
|
+
cmdargs << '--xml' if uses_xml?
|
16
|
+
cmdargs.concat args
|
15
17
|
info "cmdargs: #{cmdargs}"
|
16
18
|
super cmdargs
|
17
19
|
end
|
20
|
+
|
21
|
+
def uses_xml?
|
22
|
+
true
|
23
|
+
end
|
18
24
|
end
|
19
25
|
|
20
26
|
class CachingCommandLine < System::CachingCommandLine
|
21
27
|
def initialize subcmd, args = Array.new
|
22
28
|
info "args: #{args}"
|
23
|
-
cmdargs
|
29
|
+
cmdargs << '--xml' if uses_xml?
|
30
|
+
cmdargs.concat args
|
24
31
|
info "cmdargs: #{cmdargs}"
|
25
32
|
super cmdargs
|
26
33
|
end
|
34
|
+
|
35
|
+
def uses_xml?
|
36
|
+
true
|
37
|
+
end
|
27
38
|
end
|
28
39
|
|
29
40
|
class CommandArgs
|
41
|
+
include Loggable
|
42
|
+
|
30
43
|
attr_accessor :path
|
31
44
|
|
32
45
|
def initialize args = Hash.new
|
data/lib/svnx/entries.rb
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# -*- ruby -*-
|
3
|
+
|
4
|
+
require 'rexml/document'
|
5
|
+
|
6
|
+
module SVNx
|
7
|
+
# this is a parse/process on-demand list of entries, acting like an
|
8
|
+
# Enumerable.
|
9
|
+
|
10
|
+
class Entries
|
11
|
+
include Loggable, Enumerable
|
12
|
+
|
13
|
+
attr_reader :size
|
14
|
+
|
15
|
+
def initialize args = Hash.new
|
16
|
+
# it's a hash, but indexed with integers.
|
17
|
+
@entries = Hash.new
|
18
|
+
|
19
|
+
if xmllines = args[:xmllines]
|
20
|
+
# this is preferred
|
21
|
+
|
22
|
+
if xmllines.kind_of? Array
|
23
|
+
xmllines = xmllines.join ''
|
24
|
+
end
|
25
|
+
|
26
|
+
doc = REXML::Document.new xmllines
|
27
|
+
|
28
|
+
@elements = get_elements doc
|
29
|
+
@size = @elements.size
|
30
|
+
elsif xmlentries = args[:xmlentries]
|
31
|
+
raise "argument xmlentries is no longer supported"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def get_elements doc
|
36
|
+
end
|
37
|
+
|
38
|
+
def create_entry xmlelement
|
39
|
+
end
|
40
|
+
|
41
|
+
def [] idx
|
42
|
+
@entries[idx] ||= create_entry(@elements[idx + 1])
|
43
|
+
end
|
44
|
+
|
45
|
+
def each(&blk)
|
46
|
+
# all elements must be processed before this can happen:
|
47
|
+
if @elements
|
48
|
+
# a little confusing here: REXML does each_with_index with idx
|
49
|
+
# zero-based, but elements[0] is invalid.
|
50
|
+
@elements.each_with_index do |element, idx|
|
51
|
+
@entries[idx] ||= create_entry(element)
|
52
|
+
end
|
53
|
+
|
54
|
+
@elements = nil
|
55
|
+
end
|
56
|
+
|
57
|
+
@entries.keys.sort.collect { |idx| @entries[idx] }.each(&blk)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
data/lib/svnx/entry.rb
CHANGED
@@ -9,6 +9,30 @@ module SVNx
|
|
9
9
|
class Entry
|
10
10
|
include Loggable
|
11
11
|
|
12
|
+
def initialize args = Hash.new
|
13
|
+
if xmllines = args[:xmllines]
|
14
|
+
if xmllines.kind_of? Array
|
15
|
+
xmllines = xmllines.join ''
|
16
|
+
end
|
17
|
+
|
18
|
+
doc = REXML::Document.new xmllines
|
19
|
+
|
20
|
+
set_from_xml doc
|
21
|
+
elsif elmt = args[:xmlelement]
|
22
|
+
set_from_element elmt
|
23
|
+
else
|
24
|
+
raise "must be initialized with xmllines or xmlelement"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def set_from_xml xmldoc
|
29
|
+
raise "must be implemented"
|
30
|
+
end
|
31
|
+
|
32
|
+
def set_from_element elmt
|
33
|
+
raise "must be implemented"
|
34
|
+
end
|
35
|
+
|
12
36
|
def get_attribute xmlelement, attrname
|
13
37
|
xmlelement.attributes[attrname]
|
14
38
|
end
|
data/lib/svnx/info/command.rb
CHANGED
@@ -6,16 +6,23 @@ require 'svnx/command'
|
|
6
6
|
module SVNx
|
7
7
|
class InfoCommandLine < CommandLine
|
8
8
|
def initialize args = Array.new
|
9
|
-
super "info", args
|
9
|
+
super "info", args.to_a
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
13
|
class InfoCommandArgs < CommandArgs
|
14
|
+
def to_a
|
15
|
+
ary = Array.new
|
16
|
+
if @path
|
17
|
+
ary << @path
|
18
|
+
end
|
19
|
+
ary
|
20
|
+
end
|
14
21
|
end
|
15
22
|
|
16
23
|
class InfoCommand < Command
|
17
24
|
def command_line
|
18
|
-
InfoCommandLine.new @
|
25
|
+
InfoCommandLine.new @args
|
19
26
|
end
|
20
27
|
end
|
21
28
|
end
|
data/lib/svnx/info/entries.rb
CHANGED
@@ -1,27 +1,19 @@
|
|
1
1
|
#!/usr/bin/ruby -w
|
2
2
|
# -*- ruby -*-
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
module SVNx; module Info; end; end
|
4
|
+
require 'svnx/info/entry'
|
5
|
+
require 'svnx/entries'
|
7
6
|
|
8
7
|
module SVNx::Info
|
9
|
-
class Entries <
|
8
|
+
class Entries < SVNx::Entries
|
10
9
|
include Loggable
|
11
10
|
|
12
|
-
def
|
13
|
-
|
14
|
-
|
11
|
+
def get_elements doc
|
12
|
+
doc.elements['info'].elements
|
13
|
+
end
|
15
14
|
|
16
|
-
|
17
|
-
|
18
|
-
self << Entry.new(:xmlelement => entryelement)
|
19
|
-
end
|
20
|
-
elsif xml = args[:xml]
|
21
|
-
xml.xmlentries.each do |xmlentry|
|
22
|
-
self << Entry.new(:xmlentry => xmlentry)
|
23
|
-
end
|
24
|
-
end
|
15
|
+
def create_entry xmlelement
|
16
|
+
Entry.new :xmlelement => xmlelement
|
25
17
|
end
|
26
18
|
end
|
27
19
|
end
|
data/lib/svnx/info/entry.rb
CHANGED
@@ -11,24 +11,25 @@ module SVNx::Info
|
|
11
11
|
attr_reader :root
|
12
12
|
attr_reader :kind
|
13
13
|
attr_reader :path
|
14
|
-
|
15
|
-
def initialize args = Hash.new
|
16
|
-
if xmllines = args[:xmllines]
|
17
|
-
doc = REXML::Document.new xmllines
|
18
|
-
entry = doc.elements['info/entry']
|
19
14
|
|
20
|
-
|
21
|
-
|
22
|
-
set_elmt_var entry, 'url'
|
23
|
-
|
24
|
-
repo = entry.elements['repository']
|
25
|
-
# set_elmt_var doc, 'info/entry/repository/root'
|
26
|
-
set_elmt_var repo, 'root'
|
27
|
-
else
|
28
|
-
raise "must be initialized with xmllines"
|
29
|
-
end
|
15
|
+
def set_from_xml xmldoc
|
16
|
+
entry = xmldoc.elements['info/entry']
|
30
17
|
|
31
|
-
|
18
|
+
set_attr_var entry, 'kind'
|
19
|
+
set_attr_var entry, 'path'
|
20
|
+
set_elmt_var entry, 'url'
|
21
|
+
|
22
|
+
repo = entry.elements['repository']
|
23
|
+
set_elmt_var repo, 'root'
|
24
|
+
end
|
25
|
+
|
26
|
+
def set_from_element elmt
|
27
|
+
set_attr_var elmt, 'kind'
|
28
|
+
set_attr_var elmt, 'path'
|
29
|
+
set_elmt_var elmt, 'url'
|
30
|
+
|
31
|
+
repo = elmt.elements['repository']
|
32
|
+
set_elmt_var repo, 'root'
|
32
33
|
end
|
33
34
|
end
|
34
35
|
end
|
data/lib/svnx/log/command.rb
CHANGED
data/lib/svnx/log/entries.rb
CHANGED
@@ -1,57 +1,18 @@
|
|
1
1
|
#!/usr/bin/ruby -w
|
2
2
|
# -*- ruby -*-
|
3
3
|
|
4
|
+
require 'svnx/entries'
|
4
5
|
require 'svnx/log/entry'
|
5
|
-
require 'rexml/document'
|
6
6
|
|
7
7
|
module SVNx::Log
|
8
|
-
class Entries
|
9
|
-
include Loggable, Enumerable
|
8
|
+
class Entries < SVNx::Entries
|
10
9
|
|
11
|
-
def
|
12
|
-
|
13
|
-
|
14
|
-
if xmllines = args[:xmllines]
|
15
|
-
# this is preferred
|
16
|
-
|
17
|
-
if xmllines.kind_of? Array
|
18
|
-
xmllines = xmllines.join ''
|
19
|
-
end
|
20
|
-
|
21
|
-
doc = REXML::Document.new xmllines
|
22
|
-
|
23
|
-
@logelements = doc.elements['log'].elements
|
24
|
-
@size = @logelements.size
|
25
|
-
elsif xmlentries = args[:xmlentries]
|
26
|
-
# this is legacy:
|
27
|
-
|
28
|
-
xmlentries.each do |xmlentry|
|
29
|
-
@entries[@entries.size] = Entry.new(:xmlentry => xmlentry)
|
30
|
-
end
|
31
|
-
end
|
10
|
+
def get_elements doc
|
11
|
+
doc.elements['log'].elements
|
32
12
|
end
|
33
13
|
|
34
|
-
def
|
35
|
-
|
36
|
-
end
|
37
|
-
|
38
|
-
def size
|
39
|
-
@size
|
40
|
-
end
|
41
|
-
|
42
|
-
def each(&blk)
|
43
|
-
# all elements must be processed before this can happen:
|
44
|
-
if @logelements
|
45
|
-
@logelements.each_with_index do |logelement, idx|
|
46
|
-
# info "logelement: #{logelement}"
|
47
|
-
# info "idx: #{idx}"
|
48
|
-
@entries[idx] ||= Entry.new(:xmlelement => logelement)
|
49
|
-
end
|
50
|
-
|
51
|
-
@logelements = nil
|
52
|
-
end
|
53
|
-
|
54
|
-
@entries.keys.sort.collect { |idx| @entries[idx] }.each(&blk)
|
14
|
+
def create_entry xmlelement
|
15
|
+
Entry.new :xmlelement => xmlelement
|
55
16
|
end
|
56
17
|
end
|
57
18
|
end
|
data/lib/svnx/log/entry.rb
CHANGED
@@ -9,31 +9,22 @@ module SVNx::Log
|
|
9
9
|
class Entry < SVNx::Entry
|
10
10
|
|
11
11
|
attr_reader :revision, :author, :date, :paths, :msg
|
12
|
-
|
13
|
-
def
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
@paths << LogEntryPath.new(:kind => kind, :action => action, :name => name)
|
30
|
-
end
|
31
|
-
else
|
32
|
-
@revision = args[:revision]
|
33
|
-
@author = args[:author]
|
34
|
-
@date = args[:date]
|
35
|
-
@paths = args[:paths]
|
36
|
-
@message = args[:message]
|
12
|
+
|
13
|
+
def set_from_element elmt
|
14
|
+
set_attr_var elmt, 'revision'
|
15
|
+
|
16
|
+
%w{ author date msg }.each do |field|
|
17
|
+
set_elmt_var elmt, field
|
18
|
+
end
|
19
|
+
|
20
|
+
@paths = Array.new
|
21
|
+
|
22
|
+
elmt.elements.each('paths/path') do |pe|
|
23
|
+
kind = get_attribute pe, 'kind'
|
24
|
+
action = get_attribute pe, 'action'
|
25
|
+
name = pe.text
|
26
|
+
|
27
|
+
@paths << LogEntryPath.new(:kind => kind, :action => action, :name => name)
|
37
28
|
end
|
38
29
|
end
|
39
30
|
|
@@ -50,5 +41,9 @@ module SVNx::Log
|
|
50
41
|
@action = args[:action]
|
51
42
|
@name = args[:name]
|
52
43
|
end
|
44
|
+
|
45
|
+
def to_s
|
46
|
+
@name
|
47
|
+
end
|
53
48
|
end
|
54
49
|
end
|
data/lib/svnx/status/command.rb
CHANGED
@@ -6,16 +6,23 @@ require 'svnx/command'
|
|
6
6
|
module SVNx
|
7
7
|
class StatusCommandLine < CommandLine
|
8
8
|
def initialize args = Array.new
|
9
|
-
super "status", args
|
9
|
+
super "status", args.to_a
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
13
|
class StatusCommandArgs < CommandArgs
|
14
|
+
def to_a
|
15
|
+
ary = Array.new
|
16
|
+
if @path
|
17
|
+
ary << @path
|
18
|
+
end
|
19
|
+
ary
|
20
|
+
end
|
14
21
|
end
|
15
22
|
|
16
23
|
class StatusCommand < Command
|
17
24
|
def command_line
|
18
|
-
StatusCommandLine.new @
|
25
|
+
StatusCommandLine.new @args
|
19
26
|
end
|
20
27
|
end
|
21
28
|
end
|
data/lib/svnx/status/entries.rb
CHANGED
@@ -2,21 +2,16 @@
|
|
2
2
|
# -*- ruby -*-
|
3
3
|
|
4
4
|
require 'svnx/status/entry'
|
5
|
+
require 'svnx/entries'
|
5
6
|
|
6
7
|
module SVNx::Status
|
7
|
-
class Entries <
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
super()
|
12
|
-
|
13
|
-
raise "not implemented"
|
8
|
+
class Entries < SVNx::Entries
|
9
|
+
def get_elements doc
|
10
|
+
doc.elements['status'].elements['target'].elements
|
11
|
+
end
|
14
12
|
|
15
|
-
|
16
|
-
|
17
|
-
self << Entry.new(:xml => xmlentry)
|
18
|
-
end
|
19
|
-
end
|
13
|
+
def create_entry xmlelement
|
14
|
+
Entry.new :xmlelement => xmlelement
|
20
15
|
end
|
21
16
|
end
|
22
17
|
end
|
data/lib/svnx/status/entry.rb
CHANGED
@@ -10,24 +10,27 @@ module SVNx::Status
|
|
10
10
|
|
11
11
|
attr_reader :status
|
12
12
|
attr_reader :path
|
13
|
-
|
14
|
-
def initialize args = Hash.new
|
15
|
-
if xmllines = args[:xmllines]
|
16
|
-
doc = REXML::Document.new xmllines
|
17
|
-
stelmt = doc.elements['status']
|
18
|
-
tgt = stelmt.elements['target']
|
19
13
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
14
|
+
def set_from_xml xmldoc
|
15
|
+
stelmt = xmldoc.elements['status']
|
16
|
+
tgt = stelmt.elements['target']
|
17
|
+
|
18
|
+
set_attr_var tgt, 'path'
|
19
|
+
@status = if entry = tgt.elements['entry']
|
20
|
+
wcstatus = entry.elements['wc-status']
|
21
|
+
wcstatus.attributes['item']
|
22
|
+
else
|
23
|
+
"unchanged"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def set_from_element elmt
|
28
|
+
set_attr_var elmt, 'path'
|
29
|
+
@status = if wcstatus = elmt.elements['wc-status']
|
30
|
+
wcstatus.attributes['item']
|
31
|
+
else
|
32
|
+
"unchanged"
|
33
|
+
end
|
31
34
|
end
|
32
35
|
end
|
33
36
|
end
|
@@ -24,8 +24,8 @@ module SVNx::Log
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def test_entry_from_command
|
27
|
-
lcargs = LogCommandArgs.new :limit => 2, :verbose => false, :use_cache => false
|
28
|
-
lc = LogCommand.new lcargs
|
27
|
+
lcargs = SVNx::LogCommandArgs.new :limit => 2, :verbose => false, :use_cache => false
|
28
|
+
lc = SVNx::LogCommand.new lcargs
|
29
29
|
|
30
30
|
lc.execute
|
31
31
|
output = lc.output
|
@@ -0,0 +1,22 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# -*- ruby -*-
|
3
|
+
|
4
|
+
require 'svnx/info/tc'
|
5
|
+
require 'svnx/info/entries'
|
6
|
+
|
7
|
+
module SVNx::Info
|
8
|
+
class EntriesTestCase < SVNx::Info::TestCase
|
9
|
+
|
10
|
+
def test_create_from_xml
|
11
|
+
entries = Entries.new :xmllines => get_test_lines_two_entries
|
12
|
+
info "entries: #{entries}"
|
13
|
+
|
14
|
+
assert_equal 2, entries.size
|
15
|
+
|
16
|
+
exproot = 'file:///home/jpace/Programs/Subversion/Repositories/wiquery'
|
17
|
+
|
18
|
+
assert_entry_equals entries[0], :path => 'pom.xml', :kind => 'file', :url => exproot + '/trunk/pom.xml', :root => exproot
|
19
|
+
assert_entry_equals entries[1], :path => 'Orig.java', :kind => 'file', :url => exproot + '/trunk/Orig.java', :root => exproot
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -7,36 +7,8 @@ require 'svnx/info/entry'
|
|
7
7
|
module SVNx::Info
|
8
8
|
class EntryTestCase < SVNx::Info::TestCase
|
9
9
|
include Loggable
|
10
|
-
|
11
10
|
def test_entry_from_xml
|
12
|
-
|
13
|
-
xml = Array.new
|
14
|
-
xml << '<?xml version="1.0"?>'
|
15
|
-
xml << '<info>'
|
16
|
-
xml << '<entry'
|
17
|
-
xml << ' kind="file"'
|
18
|
-
xml << ' path="wiquery-core/pom.xml"'
|
19
|
-
xml << ' revision="1950">'
|
20
|
-
xml << '<url>file:///home/jpace/Programs/Subversion/Repositories/wiquery/trunk/wiquery-core/pom.xml</url>'
|
21
|
-
xml << '<repository>'
|
22
|
-
xml << '<root>file:///home/jpace/Programs/Subversion/Repositories/wiquery</root>'
|
23
|
-
xml << '<uuid>9d44104b-4b85-4781-9eca-83ed02b512a0</uuid>'
|
24
|
-
xml << '</repository>'
|
25
|
-
xml << '<wc-info>'
|
26
|
-
xml << '<schedule>normal</schedule>'
|
27
|
-
xml << '<depth>infinity</depth>'
|
28
|
-
xml << '<text-updated>2011-11-28T11:26:07.772551Z</text-updated>'
|
29
|
-
xml << '<checksum>3b2a51d21a9517a4d3dc5865c4b56db9</checksum>'
|
30
|
-
xml << '</wc-info>'
|
31
|
-
xml << '<commit'
|
32
|
-
xml << ' revision="1907">'
|
33
|
-
xml << '<author>hielke.hoeve@gmail.com</author>'
|
34
|
-
xml << '<date>2011-11-14T10:50:38.389281Z</date>'
|
35
|
-
xml << '</commit>'
|
36
|
-
xml << '</entry>'
|
37
|
-
xml << '</info>'
|
38
|
-
|
39
|
-
xmllines = xml.collect { |line| line + "\n" }
|
11
|
+
xmllines = get_test_lines_one_entry
|
40
12
|
|
41
13
|
expdata = {
|
42
14
|
:url => 'file:///home/jpace/Programs/Subversion/Repositories/wiquery/trunk/wiquery-core/pom.xml',
|
@@ -45,7 +17,7 @@ module SVNx::Info
|
|
45
17
|
:root => 'file:///home/jpace/Programs/Subversion/Repositories/wiquery'
|
46
18
|
}
|
47
19
|
|
48
|
-
entry = Entry.new :xmllines => xmllines
|
20
|
+
entry = Entry.new :xmllines => xmllines
|
49
21
|
assert_entry_equals entry, expdata
|
50
22
|
end
|
51
23
|
end
|
@@ -13,19 +13,22 @@ module SVNx::Log
|
|
13
13
|
assert entry.message
|
14
14
|
assert entry.author
|
15
15
|
end
|
16
|
-
|
17
|
-
def
|
16
|
+
|
17
|
+
def assert_log_entry_1947 entry
|
18
18
|
expdata = '1947', 'reiern70', '2011-11-14T12:24:45.757124Z', 'added a convenience method to set the range'
|
19
19
|
expdata << { :kind => 'file',
|
20
20
|
:action => 'M',
|
21
21
|
:name => '/trunk/wiquery-jquery-ui/src/test/java/org/odlabs/wiquery/ui/slider/SliderTestCase.java'
|
22
22
|
}
|
23
23
|
|
24
|
+
assert_log_entry_equals entry, expdata
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_create_from_xml
|
24
28
|
entries = Entries.new :xmllines => get_test_lines_limit_15
|
25
|
-
|
26
|
-
assert_log_entry_equals entries[2], expdata
|
29
|
+
assert_log_entry_1947 entries[2]
|
27
30
|
end
|
28
|
-
|
31
|
+
|
29
32
|
def test_no_author_field
|
30
33
|
entries = Entries.new :xmllines => get_test_lines_no_author
|
31
34
|
nentries = entries.size
|
@@ -69,5 +72,17 @@ module SVNx::Log
|
|
69
72
|
assert_nil real_entries[16]
|
70
73
|
assert_nil real_entries[18]
|
71
74
|
end
|
75
|
+
|
76
|
+
def test_each
|
77
|
+
idx = 0
|
78
|
+
|
79
|
+
entries = Entries.new :xmllines => get_test_lines_limit_15
|
80
|
+
entries.each do |entry|
|
81
|
+
if idx == 2
|
82
|
+
assert_log_entry_1947 entry
|
83
|
+
end
|
84
|
+
idx += 1
|
85
|
+
end
|
86
|
+
end
|
72
87
|
end
|
73
88
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# -*- ruby -*-
|
3
|
+
|
4
|
+
require 'svnx/status/tc'
|
5
|
+
require 'svnx/status/entries'
|
6
|
+
|
7
|
+
module SVNx::Status
|
8
|
+
class EntriesTestCase < SVNx::Status::TestCase
|
9
|
+
|
10
|
+
def test_create_from_xml
|
11
|
+
entries = Entries.new :xmllines => get_test_lines_all
|
12
|
+
|
13
|
+
assert_equal 4, entries.size
|
14
|
+
assert_status_entry_equals 'added', 'Orig.java', entries[0]
|
15
|
+
assert_status_entry_equals 'deleted', 'LICENSE', entries[1]
|
16
|
+
assert_status_entry_equals 'modified', 'pom.xml', entries[2]
|
17
|
+
assert_status_entry_equals 'modified', 'wiquery-core/src/main/java/org/odlabs/wiquery/core/effects/EffectBehavior.java', entries[3]
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -30,10 +30,8 @@ module SVNx::Status
|
|
30
30
|
xml << "</target>\n"
|
31
31
|
xml << "</status>\n"
|
32
32
|
|
33
|
-
expdata = { :path => 'LICENSE', :status => 'deleted' }
|
34
|
-
|
35
33
|
entry = Entry.new :xmllines => xml.join('')
|
36
|
-
|
34
|
+
assert_status_entry_equals 'deleted', 'LICENSE', entry
|
37
35
|
end
|
38
36
|
end
|
39
37
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pvn
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 4
|
10
|
+
version: 0.0.4
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Jeff Pace
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-09-
|
18
|
+
date: 2012-09-04 00:00:00 -04:00
|
19
19
|
default_executable: pvn
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -61,10 +61,12 @@ files:
|
|
61
61
|
- lib/system/command.rb
|
62
62
|
- lib/system/cachecmd.rb
|
63
63
|
- lib/system/cmdexec.rb
|
64
|
+
- lib/svnx/cat/command.rb
|
64
65
|
- lib/svnx/status/command.rb
|
65
66
|
- lib/svnx/status/entries.rb
|
66
67
|
- lib/svnx/status/entry.rb
|
67
68
|
- lib/svnx/command.rb
|
69
|
+
- lib/svnx/entries.rb
|
68
70
|
- lib/svnx/info/command.rb
|
69
71
|
- lib/svnx/info/entries.rb
|
70
72
|
- lib/svnx/info/entry.rb
|
@@ -76,6 +78,7 @@ files:
|
|
76
78
|
- lib/pvn/subcommands/base/clargs.rb
|
77
79
|
- lib/pvn/subcommands/base/command.rb
|
78
80
|
- lib/pvn/subcommands/base/doc.rb
|
81
|
+
- lib/pvn/subcommands/pct/options.rb
|
79
82
|
- lib/pvn/subcommands/pct/clargs.rb
|
80
83
|
- lib/pvn/subcommands/pct/command.rb
|
81
84
|
- lib/pvn/subcommands/log/options.rb
|
@@ -125,7 +128,9 @@ files:
|
|
125
128
|
- test/unit/synoption/option_test.rb
|
126
129
|
- test/unit/system/command/caching_test.rb
|
127
130
|
- test/unit/system/command/line_test.rb
|
131
|
+
- test/unit/svnx/status/entries_test.rb
|
128
132
|
- test/unit/svnx/status/entry_test.rb
|
133
|
+
- test/unit/svnx/info/entries_test.rb
|
129
134
|
- test/unit/svnx/info/entry_test.rb
|
130
135
|
- test/unit/svnx/log/entries_test.rb
|
131
136
|
- test/unit/svnx/log/entry_test.rb
|
@@ -182,7 +187,9 @@ test_files:
|
|
182
187
|
- test/unit/synoption/option_test.rb
|
183
188
|
- test/unit/system/command/caching_test.rb
|
184
189
|
- test/unit/system/command/line_test.rb
|
190
|
+
- test/unit/svnx/status/entries_test.rb
|
185
191
|
- test/unit/svnx/status/entry_test.rb
|
192
|
+
- test/unit/svnx/info/entries_test.rb
|
186
193
|
- test/unit/svnx/info/entry_test.rb
|
187
194
|
- test/unit/svnx/log/entries_test.rb
|
188
195
|
- test/unit/svnx/log/entry_test.rb
|