svnx 1.0.1 → 2.0.6
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 +4 -4
- data/.gitignore +2 -0
- data/.glarkrc +1 -0
- data/Features.txt +7 -0
- data/Gemfile +4 -0
- data/History.txt +4 -0
- data/LICENSE +20 -0
- data/Manifest.txt +0 -0
- data/README.md +12 -0
- data/Rakefile +12 -0
- data/lib/svnx/base/action.rb +57 -52
- data/lib/svnx/base/cmdline.rb +58 -0
- data/lib/svnx/base/command.rb +49 -41
- data/lib/svnx/base/entries.rb +46 -45
- data/lib/svnx/base/entry.rb +51 -38
- data/lib/svnx/base/env.rb +26 -0
- data/lib/svnx/base/options.rb +25 -0
- data/lib/svnx/cat/command.rb +3 -64
- data/lib/svnx/cat/options.rb +28 -0
- data/lib/svnx/commit/command.rb +9 -0
- data/lib/svnx/commit/options.rb +29 -0
- data/lib/svnx/diff/command.rb +17 -0
- data/lib/svnx/diff/elements.rb +84 -0
- data/lib/svnx/diff/options.rb +35 -0
- data/lib/svnx/diff/parser.rb +105 -0
- data/lib/svnx/info/command.rb +4 -47
- data/lib/svnx/info/entries.rb +6 -8
- data/lib/svnx/info/entry.rb +21 -23
- data/lib/svnx/info/options.rb +28 -0
- data/lib/svnx/io/directory.rb +9 -5
- data/lib/svnx/io/element.rb +93 -95
- data/lib/svnx/log/command.rb +7 -3
- data/lib/svnx/log/entries.rb +17 -14
- data/lib/svnx/log/entry.rb +61 -49
- data/lib/svnx/log/options.rb +31 -0
- data/lib/svnx/merge/command.rb +9 -0
- data/lib/svnx/merge/options.rb +34 -0
- data/lib/svnx/project.rb +74 -0
- data/lib/svnx/propget/command.rb +9 -0
- data/lib/svnx/propget/entries.rb +15 -0
- data/lib/svnx/propget/entry.rb +23 -0
- data/lib/svnx/propget/options.rb +31 -0
- data/lib/svnx/propset/command.rb +9 -0
- data/lib/svnx/propset/options.rb +33 -0
- data/lib/svnx/revision/argfactory.rb +2 -2
- data/lib/svnx/revision/argument.rb +7 -3
- data/lib/svnx/revision/date.rb +27 -0
- data/lib/svnx/revision/error.rb +2 -2
- data/lib/svnx/revision/range.rb +5 -2
- data/lib/svnx/status/command.rb +4 -42
- data/lib/svnx/status/entries.rb +11 -12
- data/lib/svnx/status/entry.rb +43 -41
- data/lib/svnx/status/options.rb +28 -0
- data/lib/svnx/update/command.rb +9 -0
- data/lib/svnx/update/options.rb +25 -0
- data/lib/svnx/util/dateutil.rb +35 -0
- data/lib/svnx/util/objutil.rb +14 -0
- data/lib/{svnx.rb → svnx/version.rb} +2 -2
- data/lib/system/command/arg.rb +6 -5
- data/lib/system/command/cachefile.rb +29 -21
- data/lib/system/command/caching.rb +12 -25
- data/lib/system/command/line.rb +41 -30
- data/svnx.gemspec +34 -0
- metadata +85 -61
- data/lib/svnx/base/args.rb +0 -24
- data/lib/svnx/log/args.rb +0 -57
- data/lib/svnx/log/exec.rb +0 -27
- data/lib/svnx/log/line.rb +0 -42
- data/test/integration/info/info_test.rb +0 -21
- data/test/integration/log/log_test.rb +0 -74
- data/test/integration/status/status_test.rb +0 -35
- data/test/integration/svnx/io/element_test.rb +0 -235
- data/test/unit/svnx/base/action_test.rb +0 -49
- data/test/unit/svnx/cat/command_test.rb +0 -55
- data/test/unit/svnx/info/entries_test.rb +0 -22
- data/test/unit/svnx/log/args_test.rb +0 -15
- data/test/unit/svnx/log/entries_test.rb +0 -87
- data/test/unit/svnx/log/entry_test.rb +0 -15
- data/test/unit/svnx/log/exec_test.rb +0 -15
- data/test/unit/svnx/log/line_test.rb +0 -14
- data/test/unit/svnx/revision/argfactory_test.rb +0 -50
- data/test/unit/svnx/revision/argument_test.rb +0 -167
- data/test/unit/svnx/revision/range_test.rb +0 -48
- data/test/unit/svnx/status/entries_test.rb +0 -20
- data/test/unit/system/command/cachefile_test.rb +0 -52
- data/test/unit/system/command/caching_test.rb +0 -92
- data/test/unit/system/command/line_test.rb +0 -63
data/lib/svnx/base/entry.rb
CHANGED
@@ -4,54 +4,67 @@
|
|
4
4
|
require 'rexml/document'
|
5
5
|
require 'logue/loggable'
|
6
6
|
|
7
|
-
module
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
set_from_xml doc
|
20
|
-
elsif elmt = args[:xmlelement]
|
21
|
-
set_from_element elmt
|
22
|
-
else
|
23
|
-
raise "must be initialized with xmllines or xmlelement"
|
7
|
+
module Svnx
|
8
|
+
module Base
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
class Svnx::Base::Entry
|
13
|
+
include Logue::Loggable
|
14
|
+
|
15
|
+
def initialize xmllines: nil, xmlelement: nil
|
16
|
+
if xmllines
|
17
|
+
if xmllines.kind_of? Array
|
18
|
+
xmllines = xmllines.join ''
|
24
19
|
end
|
20
|
+
doc = REXML::Document.new xmllines
|
21
|
+
set_from_xml doc
|
22
|
+
elsif xmlelement
|
23
|
+
set_from_element xmlelement
|
24
|
+
else
|
25
|
+
raise "must be initialized with xmllines (received: #{xmllines.inspect}) or xmlelement (received: #{xmlelement.inspect})"
|
25
26
|
end
|
27
|
+
end
|
26
28
|
|
27
|
-
|
28
|
-
|
29
|
-
|
29
|
+
def set_from_xml xmldoc
|
30
|
+
raise "must be implemented"
|
31
|
+
end
|
30
32
|
|
31
|
-
|
32
|
-
|
33
|
-
|
33
|
+
def set_from_element elmt
|
34
|
+
raise "must be implemented"
|
35
|
+
end
|
34
36
|
|
35
|
-
|
36
|
-
|
37
|
-
|
37
|
+
def set_attr_var xmlelement, varname
|
38
|
+
set_var varname, attribute_value(xmlelement, varname)
|
39
|
+
end
|
38
40
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
(elmt && elmt.text) || ""
|
41
|
+
def set_attr_vars xmlelement, *varnames
|
42
|
+
varnames.each do |varname|
|
43
|
+
set_attr_var xmlelement, varname
|
43
44
|
end
|
45
|
+
end
|
44
46
|
|
45
|
-
|
46
|
-
|
47
|
-
|
47
|
+
def set_elmt_var xmlelement, varname
|
48
|
+
set_var varname, element_text(xmlelement, varname)
|
49
|
+
end
|
48
50
|
|
49
|
-
|
50
|
-
|
51
|
+
def set_elmt_vars xmlelement, *varnames
|
52
|
+
varnames.each do |varname|
|
53
|
+
set_elmt_var xmlelement, varname
|
51
54
|
end
|
55
|
+
end
|
52
56
|
|
53
|
-
|
54
|
-
|
55
|
-
|
57
|
+
def set_var varname, value
|
58
|
+
instance_variable_set '@' + varname.to_s, value
|
59
|
+
end
|
60
|
+
|
61
|
+
def attribute_value xmlelement, attrname
|
62
|
+
xmlelement.attributes[attrname.to_s]
|
56
63
|
end
|
64
|
+
|
65
|
+
def element_text xmlelement, elmtname
|
66
|
+
elmt = xmlelement.elements[elmtname.to_s]
|
67
|
+
# some elements don't have text:
|
68
|
+
(elmt && elmt.text) || ""
|
69
|
+
end
|
57
70
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# -*- ruby -*-
|
3
|
+
|
4
|
+
require 'singleton'
|
5
|
+
|
6
|
+
module Svnx
|
7
|
+
end
|
8
|
+
|
9
|
+
class Svnx::Env
|
10
|
+
include Singleton
|
11
|
+
|
12
|
+
# the directory into which to put cached files
|
13
|
+
attr_accessor :cache_dir_name
|
14
|
+
|
15
|
+
# the environment variable, naming the cache directory
|
16
|
+
attr_accessor :cache_dir_env_varname
|
17
|
+
|
18
|
+
def initialize
|
19
|
+
@cache_dir_name = "/tmp/svnx"
|
20
|
+
@cache_dir_env_varname = "SVNX_TMP_DIR"
|
21
|
+
end
|
22
|
+
|
23
|
+
def cache_dir
|
24
|
+
ENV[@cache_dir_env_varname] || @cache_dir_name
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# -*- ruby -*-
|
3
|
+
|
4
|
+
require 'svnx/util/objutil'
|
5
|
+
|
6
|
+
module Svnx
|
7
|
+
module Base
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
class Svnx::Base::Options
|
12
|
+
include Svnx::ObjectUtil
|
13
|
+
|
14
|
+
def to_args
|
15
|
+
Array.new.tap do |args|
|
16
|
+
options_to_args.each do |opt|
|
17
|
+
optname = opt[0]
|
18
|
+
values = opt[1]
|
19
|
+
if send optname
|
20
|
+
args.concat [ values ].flatten
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/svnx/cat/command.rb
CHANGED
@@ -1,70 +1,9 @@
|
|
1
1
|
#!/usr/bin/ruby -w
|
2
2
|
# -*- ruby -*-
|
3
3
|
|
4
|
+
require 'svnx/cat/options'
|
4
5
|
require 'svnx/base/command'
|
5
|
-
require 'system/command/caching'
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
# this can be either an Array (for which to_a returns itself), or a
|
10
|
-
# CommandArgs, which also has to_a.
|
11
|
-
def initialize args = Array.new
|
12
|
-
super "cat", args.to_a
|
13
|
-
end
|
14
|
-
|
15
|
-
def uses_xml?
|
16
|
-
false
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
class CatCommandLine < CommandLine
|
21
|
-
include CatCmdLine
|
22
|
-
end
|
23
|
-
|
24
|
-
class CatCommandLineCaching < CachingCommandLine
|
25
|
-
include CatCmdLine
|
26
|
-
end
|
27
|
-
|
28
|
-
class CatCommandArgs < CommandArgs
|
29
|
-
attr_reader :revision
|
30
|
-
attr_reader :use_cache
|
31
|
-
|
32
|
-
def initialize args = Hash.new
|
33
|
-
@use_cache = args[:use_cache].nil? || args[:use_cache]
|
34
|
-
@revision = args[:revision]
|
35
|
-
super
|
36
|
-
end
|
37
|
-
|
38
|
-
def to_a
|
39
|
-
ary = Array.new
|
40
|
-
if @revision
|
41
|
-
ary << "-r#{@revision}"
|
42
|
-
end
|
43
|
-
|
44
|
-
if @path
|
45
|
-
ary << @path
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
class CatCommand < Command
|
51
|
-
def initialize args
|
52
|
-
@use_cache = args.use_cache
|
53
|
-
super
|
54
|
-
end
|
55
|
-
|
56
|
-
def command_line
|
57
|
-
cls = @use_cache ? CatCommandLineCaching : CatCommandLine
|
58
|
-
cls.new @args
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
class CatExec
|
63
|
-
attr_reader :output
|
64
|
-
|
65
|
-
def initialize args
|
66
|
-
cmd = CatCommand.new CatCommandArgs.new(args)
|
67
|
-
@output = cmd.execute
|
68
|
-
end
|
69
|
-
end
|
7
|
+
class Svnx::Cat::Command < Svnx::Base::Command
|
8
|
+
caching
|
70
9
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# -*- ruby -*-
|
3
|
+
|
4
|
+
require 'svnx/util/objutil'
|
5
|
+
require 'svnx/base/options'
|
6
|
+
|
7
|
+
module Svnx
|
8
|
+
module Cat
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
class Svnx::Cat::Options < Svnx::Base::Options
|
13
|
+
attr_reader :revision
|
14
|
+
attr_reader :url
|
15
|
+
attr_reader :path
|
16
|
+
|
17
|
+
def initialize args
|
18
|
+
assign args, :revision, :url, :path
|
19
|
+
end
|
20
|
+
|
21
|
+
def options_to_args
|
22
|
+
Array.new.tap do |optargs|
|
23
|
+
optargs << [ :revision, [ "-r", revision ] ]
|
24
|
+
optargs << [ :url, url ]
|
25
|
+
optargs << [ :path, path ]
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# -*- ruby -*-
|
3
|
+
|
4
|
+
require 'svnx/base/options'
|
5
|
+
|
6
|
+
module Svnx
|
7
|
+
module Commit
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
class Svnx::Commit::Options < Svnx::Base::Options
|
12
|
+
include Svnx::ObjectUtil
|
13
|
+
|
14
|
+
attr_reader :file
|
15
|
+
attr_reader :paths
|
16
|
+
attr_reader :url
|
17
|
+
|
18
|
+
def initialize args = Hash.new
|
19
|
+
assign args, :file, :paths, :url
|
20
|
+
end
|
21
|
+
|
22
|
+
def options_to_args
|
23
|
+
Array.new.tap do |optargs|
|
24
|
+
optargs << [ :file, [ "-F", file ] ]
|
25
|
+
optargs << [ :url, url ]
|
26
|
+
optargs << [ :paths, paths ]
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# -*- ruby -*-
|
3
|
+
|
4
|
+
require 'svnx/diff/options'
|
5
|
+
require 'svnx/base/command'
|
6
|
+
require 'svnx/diff/parser'
|
7
|
+
|
8
|
+
class Svnx::Diff::Command < Svnx::Base::Command
|
9
|
+
attr_reader :entries
|
10
|
+
|
11
|
+
def initialize cmdopts, cls: Svnx::Base::CommandLine, exec: nil
|
12
|
+
super cmdopts, cls: cls, exec: exec, xml: false, caching: true
|
13
|
+
if @output
|
14
|
+
@entries = Svnx::Diff::Parser.new.parse_all_output @output.dup
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# -*- ruby -*-
|
3
|
+
|
4
|
+
require 'logue/loggable'
|
5
|
+
|
6
|
+
module Svnx
|
7
|
+
module Diff
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
class Svnx::Diff::File
|
12
|
+
attr_reader :filename
|
13
|
+
attr_reader :revision
|
14
|
+
|
15
|
+
def initialize args
|
16
|
+
@filename = args[:filename]
|
17
|
+
@revision = args[:revision]
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
class Svnx::Diff::Header
|
22
|
+
attr_reader :filename
|
23
|
+
attr_reader :from
|
24
|
+
attr_reader :to
|
25
|
+
|
26
|
+
def initialize args
|
27
|
+
@filename = args[:filename]
|
28
|
+
@from = args[:from]
|
29
|
+
@to = args[:to]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
class Svnx::Diff::HunkRange
|
34
|
+
attr_reader :line
|
35
|
+
attr_reader :length
|
36
|
+
|
37
|
+
def initialize line, length
|
38
|
+
@line = line
|
39
|
+
@length = length
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
class Svnx::Diff::HunkRanges
|
44
|
+
attr_reader :from
|
45
|
+
attr_reader :to
|
46
|
+
|
47
|
+
def initialize from, to
|
48
|
+
@from = from
|
49
|
+
@to = to
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
# unused; I prefer a two-element array: [ :added, "sometext" ]
|
54
|
+
|
55
|
+
class Svnx::Diff::Line
|
56
|
+
attr_reader :type
|
57
|
+
attr_reader :text
|
58
|
+
|
59
|
+
def initialize type, text
|
60
|
+
@type = type
|
61
|
+
@text = text
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
class Svnx::Diff::Hunk
|
66
|
+
attr_reader :ranges
|
67
|
+
attr_reader :lines
|
68
|
+
|
69
|
+
def initialize ranges, lines
|
70
|
+
@ranges = ranges
|
71
|
+
@lines = lines
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
# all diffs for one file
|
76
|
+
class SvnFileDiff
|
77
|
+
attr_reader :header
|
78
|
+
attr_reader :hunks
|
79
|
+
|
80
|
+
def initialize header, hunks = Array.new
|
81
|
+
@header = header
|
82
|
+
@hunks = hunks
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# -*- ruby -*-
|
3
|
+
|
4
|
+
require 'svnx/base/options'
|
5
|
+
|
6
|
+
module Svnx
|
7
|
+
module Diff
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
class Svnx::Diff::Options < Svnx::Base::Options
|
12
|
+
attr_reader :commit
|
13
|
+
attr_reader :ignoreproperties
|
14
|
+
attr_reader :ignorewhitespace
|
15
|
+
attr_reader :paths
|
16
|
+
attr_reader :url
|
17
|
+
|
18
|
+
def initialize args = Hash.new
|
19
|
+
@commit = args[:commit]
|
20
|
+
@ignoreproperties = args[:ignoreproperties]
|
21
|
+
@ignorewhitespace = args[:ignorewhitespace]
|
22
|
+
@paths = args[:paths]
|
23
|
+
@url = args[:url]
|
24
|
+
end
|
25
|
+
|
26
|
+
def options_to_args
|
27
|
+
Array.new.tap do |optargs|
|
28
|
+
optargs << [ :commit, [ "-c", commit ] ]
|
29
|
+
optargs << [ :ignoreproperties, "--ignore-properties" ]
|
30
|
+
optargs << [ :ignorewhitespace, [ "-x", "-bw" ] ]
|
31
|
+
optargs << [ :url, url ]
|
32
|
+
optargs << [ :paths, paths ]
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|