svnx 0.0.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 +7 -0
- data/lib/svnx.rb +6 -0
- data/lib/svnx/action.rb +48 -0
- data/lib/svnx/cat/command.rb +61 -0
- data/lib/svnx/command.rb +79 -0
- data/lib/svnx/entries.rb +68 -0
- data/lib/svnx/entry.rb +59 -0
- data/lib/svnx/exec.rb +41 -0
- data/lib/svnx/info/command.rb +44 -0
- data/lib/svnx/info/entries.rb +17 -0
- data/lib/svnx/info/entry.rb +31 -0
- data/lib/svnx/log/command.rb +76 -0
- data/lib/svnx/log/entries.rb +17 -0
- data/lib/svnx/log/entry.rb +53 -0
- data/lib/svnx/status/command.rb +28 -0
- data/lib/svnx/status/entries.rb +17 -0
- data/lib/svnx/status/entry.rb +53 -0
- data/lib/system/command/arg.rb +12 -0
- data/lib/system/command/cachefile.rb +50 -0
- data/lib/system/command/caching.rb +36 -0
- data/lib/system/command/line.rb +53 -0
- data/test/unit/svnx/action_test.rb +36 -0
- data/test/unit/svnx/info/entries_test.rb +22 -0
- data/test/unit/svnx/info/entry_test.rb +20 -0
- data/test/unit/svnx/log/entries_test.rb +88 -0
- data/test/unit/svnx/log/entry_test.rb +15 -0
- data/test/unit/svnx/status/entries_test.rb +20 -0
- data/test/unit/svnx/status/entry_test.rb +14 -0
- data/test/unit/system/command/cachefile_test.rb +54 -0
- data/test/unit/system/command/caching_test.rb +92 -0
- data/test/unit/system/command/line_test.rb +34 -0
- metadata +111 -0
@@ -0,0 +1,76 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# -*- ruby -*-
|
3
|
+
|
4
|
+
require 'system/command/line'
|
5
|
+
require 'system/command/caching'
|
6
|
+
require 'svnx/command'
|
7
|
+
require 'logue/loggable'
|
8
|
+
|
9
|
+
module SVNx
|
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 < CommandLine
|
19
|
+
include LogCmdLine
|
20
|
+
end
|
21
|
+
|
22
|
+
class LogCommandLineCaching < CachingCommandLine
|
23
|
+
include LogCmdLine
|
24
|
+
end
|
25
|
+
|
26
|
+
class LogCommandArgs < CommandArgs
|
27
|
+
include Logue::Loggable
|
28
|
+
|
29
|
+
attr_reader :limit
|
30
|
+
attr_reader :verbose
|
31
|
+
attr_reader :revision
|
32
|
+
attr_reader :use_cache
|
33
|
+
|
34
|
+
def initialize args = Hash.new
|
35
|
+
@limit = args[:limit]
|
36
|
+
@verbose = args[:verbose]
|
37
|
+
@use_cache = args[:use_cache].nil? || args[:use_cache]
|
38
|
+
@revision = args[:revision]
|
39
|
+
super
|
40
|
+
end
|
41
|
+
|
42
|
+
def to_a
|
43
|
+
ary = Array.new
|
44
|
+
if @limit
|
45
|
+
ary << '--limit' << @limit
|
46
|
+
end
|
47
|
+
if @verbose
|
48
|
+
ary << '-v'
|
49
|
+
end
|
50
|
+
|
51
|
+
if @revision
|
52
|
+
[ @revision ].flatten.each do |rev|
|
53
|
+
ary << "-r#{rev}"
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
if @path
|
58
|
+
ary << @path
|
59
|
+
end
|
60
|
+
|
61
|
+
ary.compact
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
class LogCommand < Command
|
66
|
+
def initialize args
|
67
|
+
@use_cache = args.use_cache
|
68
|
+
super
|
69
|
+
end
|
70
|
+
|
71
|
+
def command_line
|
72
|
+
cls = @use_cache ? LogCommandLineCaching : LogCommandLine
|
73
|
+
cls.new @args
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# -*- ruby -*-
|
3
|
+
|
4
|
+
require 'svnx/entries'
|
5
|
+
require 'svnx/log/entry'
|
6
|
+
|
7
|
+
module SVNx::Log
|
8
|
+
class Entries < SVNx::Entries
|
9
|
+
def get_elements doc
|
10
|
+
doc.elements['log'].elements
|
11
|
+
end
|
12
|
+
|
13
|
+
def create_entry xmlelement
|
14
|
+
Entry.new :xmlelement => xmlelement
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# -*- ruby -*-
|
3
|
+
|
4
|
+
require 'svnx/entry'
|
5
|
+
|
6
|
+
module SVNx; module Log; end; end
|
7
|
+
|
8
|
+
module SVNx::Log
|
9
|
+
class Entry < SVNx::Entry
|
10
|
+
|
11
|
+
attr_reader :revision, :author, :date, :paths, :msg
|
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)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def message
|
32
|
+
@msg
|
33
|
+
end
|
34
|
+
|
35
|
+
def to_s
|
36
|
+
[ @revision, @author, @date, @msg, @paths ].collect { |x| x.to_s }.join " "
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
class LogEntryPath
|
41
|
+
attr_reader :kind, :action, :name
|
42
|
+
|
43
|
+
def initialize args = Hash.new
|
44
|
+
@kind = args[:kind]
|
45
|
+
@action = args[:action]
|
46
|
+
@name = args[:name]
|
47
|
+
end
|
48
|
+
|
49
|
+
def to_s
|
50
|
+
@name
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# -*- ruby -*-
|
3
|
+
|
4
|
+
require 'svnx/command'
|
5
|
+
|
6
|
+
module SVNx
|
7
|
+
class StatusCommandLine < CommandLine
|
8
|
+
def initialize args = Array.new
|
9
|
+
super "status", args.to_a
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
class StatusCommandArgs < CommandArgs
|
14
|
+
def to_a
|
15
|
+
ary = Array.new
|
16
|
+
if @path
|
17
|
+
ary << @path
|
18
|
+
end
|
19
|
+
ary
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
class StatusCommand < Command
|
24
|
+
def command_line
|
25
|
+
StatusCommandLine.new @args
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# -*- ruby -*-
|
3
|
+
|
4
|
+
require 'svnx/status/entry'
|
5
|
+
require 'svnx/entries'
|
6
|
+
|
7
|
+
module SVNx::Status
|
8
|
+
class Entries < SVNx::Entries
|
9
|
+
def get_elements doc
|
10
|
+
doc.elements['status'].elements['target'].elements
|
11
|
+
end
|
12
|
+
|
13
|
+
def create_entry xmlelement
|
14
|
+
Entry.new :xmlelement => xmlelement
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# -*- ruby -*-
|
3
|
+
|
4
|
+
require 'svnx/entry'
|
5
|
+
require 'svnx/action'
|
6
|
+
|
7
|
+
module SVNx; module Status; end; end
|
8
|
+
|
9
|
+
module SVNx::Status
|
10
|
+
class Entry < SVNx::Entry
|
11
|
+
|
12
|
+
attr_reader :status
|
13
|
+
attr_reader :path
|
14
|
+
attr_reader :status_revision
|
15
|
+
attr_reader :action
|
16
|
+
|
17
|
+
def initialize args = Hash.new
|
18
|
+
super
|
19
|
+
@action = SVNx::Action.new @status
|
20
|
+
end
|
21
|
+
|
22
|
+
def set_from_xml xmldoc
|
23
|
+
stelmt = xmldoc.elements['status']
|
24
|
+
tgt = stelmt.elements['target']
|
25
|
+
|
26
|
+
set_attr_var tgt, 'path'
|
27
|
+
|
28
|
+
if entry = tgt.elements['entry']
|
29
|
+
set_from_element entry
|
30
|
+
else
|
31
|
+
@status = "unchanged"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def set_from_element elmt
|
36
|
+
set_attr_var elmt, 'path'
|
37
|
+
|
38
|
+
wcstatus = elmt.elements['wc-status']
|
39
|
+
@status = wcstatus.attributes['item']
|
40
|
+
@status_revision = wcstatus.attributes['revision']
|
41
|
+
|
42
|
+
if commit = wcstatus.elements['commit']
|
43
|
+
@commit_revision = commit.attributes['revision']
|
44
|
+
else
|
45
|
+
@commit_revision = nil
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def to_s
|
50
|
+
"path: #{@path}; status: #{@status}"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# -*- ruby -*-
|
3
|
+
|
4
|
+
require 'system/command/line'
|
5
|
+
require 'zlib'
|
6
|
+
require 'logue/loggable'
|
7
|
+
|
8
|
+
module System
|
9
|
+
class CacheFile
|
10
|
+
include Logue::Loggable
|
11
|
+
|
12
|
+
attr_reader :output
|
13
|
+
|
14
|
+
def initialize cache_dir, args
|
15
|
+
@args = args
|
16
|
+
@pn = Pathname.new(cache_dir) + (args.join('-').gsub('/', '_slash_') + '.gz')
|
17
|
+
@output = nil
|
18
|
+
end
|
19
|
+
|
20
|
+
def save_file
|
21
|
+
@pn.parent.mkpath unless @pn.parent.exist?
|
22
|
+
@pn.unlink if @pn.exist?
|
23
|
+
Zlib::GzipWriter.open(@pn.to_s) do |gz|
|
24
|
+
gz.puts @output
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def read_file
|
29
|
+
Zlib::GzipReader.open(@pn.to_s) do |gz|
|
30
|
+
@output = gz.readlines
|
31
|
+
end
|
32
|
+
@output
|
33
|
+
end
|
34
|
+
|
35
|
+
def readlines
|
36
|
+
if @pn.exist?
|
37
|
+
read_file
|
38
|
+
else
|
39
|
+
cl = CommandLine.new @args
|
40
|
+
@output = cl.execute
|
41
|
+
save_file
|
42
|
+
@output
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def to_s
|
47
|
+
@pn.to_s
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# -*- ruby -*-
|
3
|
+
|
4
|
+
require 'system/command/line'
|
5
|
+
require 'system/command/cachefile'
|
6
|
+
|
7
|
+
module System
|
8
|
+
class CachingCommandLine < CommandLine
|
9
|
+
# caches its input and values.
|
10
|
+
|
11
|
+
@@cache_dir = '/tmp' + Pathname.new($0).expand_path.to_s
|
12
|
+
|
13
|
+
class << self
|
14
|
+
def cache_dir
|
15
|
+
@@cache_dir
|
16
|
+
end
|
17
|
+
|
18
|
+
def cache_dir= dir
|
19
|
+
@@cache_dir = dir
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def cache_dir
|
24
|
+
@@cache_dir
|
25
|
+
end
|
26
|
+
|
27
|
+
def cache_file
|
28
|
+
CacheFile.new cache_dir, @args
|
29
|
+
end
|
30
|
+
|
31
|
+
def execute
|
32
|
+
cachefile = cache_file
|
33
|
+
@output = cachefile.readlines
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# -*- ruby -*-
|
3
|
+
|
4
|
+
require 'rubygems'
|
5
|
+
require 'system/command/arg'
|
6
|
+
require 'logue/loggable'
|
7
|
+
require 'riel/pathname'
|
8
|
+
require 'open3'
|
9
|
+
require 'rainbow'
|
10
|
+
|
11
|
+
module System
|
12
|
+
class CommandLine
|
13
|
+
include Logue::Loggable
|
14
|
+
|
15
|
+
attr_reader :output
|
16
|
+
|
17
|
+
def initialize args = Array.new
|
18
|
+
@args = args.dup
|
19
|
+
end
|
20
|
+
|
21
|
+
def << arg
|
22
|
+
# @args << Argument.new(arg)
|
23
|
+
@args << arg
|
24
|
+
end
|
25
|
+
|
26
|
+
def execute
|
27
|
+
cmd = to_command
|
28
|
+
|
29
|
+
info "cmd: #{cmd}".color("8A8A43")
|
30
|
+
|
31
|
+
# cmd << " 2>&1"
|
32
|
+
|
33
|
+
# I want to use popen3, but the version that works (sets $?) is in 1.9.x,
|
34
|
+
# not 1.8.x:
|
35
|
+
IO.popen(cmd + " 2>&1") do |io|
|
36
|
+
@output = io.readlines
|
37
|
+
end
|
38
|
+
|
39
|
+
if $? && $?.exitstatus != 0
|
40
|
+
info "cmd: #{cmd}".color(:red)
|
41
|
+
info "$?: #{$?.inspect}".color(:red)
|
42
|
+
info "$?.exitstatus: #{$? && $?.exitstatus}".color(:red)
|
43
|
+
raise "ERROR running command '#{cmd}': #{@output[-1]}"
|
44
|
+
end
|
45
|
+
|
46
|
+
@output
|
47
|
+
end
|
48
|
+
|
49
|
+
def to_command
|
50
|
+
@args.join ' '
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# -*- ruby -*-
|
3
|
+
|
4
|
+
require 'tc'
|
5
|
+
require 'svnx/action'
|
6
|
+
|
7
|
+
module SVNx
|
8
|
+
class ActionTestCase < PVN::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
|
+
end
|
36
|
+
end
|
@@ -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
|
+
def assert_info_entry_equals entry, path, kind, revision
|
10
|
+
assert_entry_equals entry, :path => path, :kind => 'file', :url => EXPROOT + '/' + path, :root => EXPROOT, :revision => revision
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_create_from_xml
|
14
|
+
entries = Entries.new :xmllines => Resources::PTP_INFO_SIXTH_TXT_DOG_RB_FIRST_TXT.readlines
|
15
|
+
assert_equal 3, entries.size
|
16
|
+
|
17
|
+
assert_info_entry_equals entries[0], 'dirzero/SixthFile.txt', 'file', '22'
|
18
|
+
assert_info_entry_equals entries[1], 'src/ruby/dog.rb', 'file', '0'
|
19
|
+
assert_info_entry_equals entries[2], 'FirstFile.txt', 'file', '22'
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|