svnx 2.8.1 → 2.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/svnx/base/cmdline.rb +12 -17
- data/lib/svnx/base/command.rb +28 -38
- data/lib/svnx/base/command_factory.rb +15 -11
- data/lib/svnx/base/command_line_factory.rb +17 -0
- data/lib/svnx/base/entries_command.rb +27 -0
- data/lib/svnx/{util/objutil.rb → base/fields.rb} +9 -9
- data/lib/svnx/base/options.rb +5 -61
- data/lib/svnx/base/tags.rb +72 -0
- data/lib/svnx/blame/command.rb +1 -1
- data/lib/svnx/diff/command.rb +1 -1
- data/lib/svnx/info/command.rb +1 -1
- data/lib/svnx/log/command.rb +1 -1
- data/lib/svnx/log/entrypath.rb +5 -2
- data/lib/svnx/project.rb +1 -0
- data/lib/svnx/propget/command.rb +1 -1
- data/lib/svnx/status/command.rb +1 -1
- data/lib/svnx/status/entries.rb +5 -1
- data/lib/svnx/status/entry.rb +5 -8
- data/lib/svnx/util/strutil.rb +12 -6
- data/lib/svnx/version.rb +1 -1
- metadata +6 -8
- data/lib/svnx/revision/argfactory.rb +0 -55
- data/lib/svnx/revision/argument.rb +0 -85
- data/lib/svnx/revision/date.rb +0 -27
- data/lib/svnx/revision/error.rb +0 -12
- data/lib/svnx/revision/range.rb +0 -54
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d1e8e4a0e4c8becac18da9d39aaeb0f9db52e683
|
4
|
+
data.tar.gz: 247d8f5ba0974ba965066ef6058f073c53020757
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 79e7e4bfad279b50d113d905cfba6ce0b8faffa1bddf7bfd11b67ac7dd8c841934369de3e2846dbd0ea7e4e31eae128770579e0de5a043cf25790c8f49e560c9
|
7
|
+
data.tar.gz: d4ad3cf461a5ff4d26635e452b3c056ad8edbacbcdf652a6a703d115b8025cb8cda70d90b19acd786ff76903ef3b59df84153ef8111a637f32a734990c4028ff
|
data/lib/svnx/base/cmdline.rb
CHANGED
@@ -1,19 +1,11 @@
|
|
1
1
|
#!/usr/bin/ruby -w
|
2
2
|
# -*- ruby -*-
|
3
3
|
|
4
|
-
require 'logue/loggable'
|
5
4
|
require 'command/cacheable/command'
|
6
5
|
require 'svnx/base/env'
|
7
6
|
|
8
|
-
module Svnx
|
9
|
-
module Base
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
7
|
module Svnx::Base
|
14
8
|
class CommandLine
|
15
|
-
include Logue::Loggable
|
16
|
-
|
17
9
|
attr_reader :output
|
18
10
|
attr_reader :error
|
19
11
|
attr_reader :status
|
@@ -25,12 +17,19 @@ module Svnx::Base
|
|
25
17
|
@args = args
|
26
18
|
end
|
27
19
|
|
20
|
+
def command
|
21
|
+
Array.new.tap do |a|
|
22
|
+
a << 'svn'
|
23
|
+
a << @subcommand
|
24
|
+
if @xml
|
25
|
+
a << '--xml'
|
26
|
+
end
|
27
|
+
a.concat @args
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
28
31
|
def execute
|
29
|
-
|
30
|
-
cmdargs << '--xml' if @xml
|
31
|
-
cmdargs.concat @args
|
32
|
-
|
33
|
-
cmdline = command_line cmdargs
|
32
|
+
cmdline = ::Command::Cacheable::Command.new command, caching: @caching, cachedir: Svnx::Env.instance.cache_dir
|
34
33
|
cmdline.execute
|
35
34
|
|
36
35
|
@output = cmdline.output
|
@@ -39,9 +38,5 @@ module Svnx::Base
|
|
39
38
|
|
40
39
|
@output
|
41
40
|
end
|
42
|
-
|
43
|
-
def command_line cmdargs
|
44
|
-
::Command::Cacheable::Command.new cmdargs, caching: @caching, cachedir: Svnx::Env.instance.cache_dir
|
45
|
-
end
|
46
41
|
end
|
47
42
|
end
|
data/lib/svnx/base/command.rb
CHANGED
@@ -3,7 +3,9 @@
|
|
3
3
|
|
4
4
|
require 'logue/loggable'
|
5
5
|
require 'svnx/util/classutil'
|
6
|
+
require 'svnx/base/options'
|
6
7
|
require 'svnx/base/command_factory'
|
8
|
+
require 'svnx/base/command_line_factory'
|
7
9
|
|
8
10
|
module Svnx::Base
|
9
11
|
class Command
|
@@ -26,52 +28,40 @@ module Svnx::Base
|
|
26
28
|
attr_reader :output
|
27
29
|
attr_reader :error
|
28
30
|
attr_reader :status
|
29
|
-
attr_reader :options
|
30
31
|
|
31
|
-
def initialize options, cmdlinecls: nil,
|
32
|
-
|
33
|
-
factory = CommandFactory.new
|
32
|
+
def initialize options, cmdlinecls: nil, caching: caching?
|
33
|
+
cmdargs = read_options options
|
34
34
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
debug "cmdargs: #{cmdargs}"
|
43
|
-
|
44
|
-
subcommand = params.subcommand
|
45
|
-
|
46
|
-
cmdlinecls ||= params.cmdline
|
47
|
-
|
48
|
-
debug "subcommand: #{subcommand}"
|
49
|
-
|
50
|
-
@cmdline = cmdlinecls.new(subcommand: subcommand, xml: xml, caching: caching, args: cmdargs)
|
51
|
-
debug "@cmdline: #{@cmdline}"
|
35
|
+
if cmdlinecls
|
36
|
+
@cmdline = cmdlinecls.new subcommand: subcommand, xml: xml?, caching: caching, args: cmdargs
|
37
|
+
else
|
38
|
+
cmdfactory = CommandFactory.new
|
39
|
+
clfactory = cmdfactory.command_line_factory
|
40
|
+
@cmdline = clfactory.create subcommand: subcommand, xml: xml?, caching: caching, args: cmdargs
|
41
|
+
end
|
52
42
|
|
53
43
|
@output = @cmdline.execute
|
54
|
-
debug "@output: #{@output}"
|
55
|
-
|
56
44
|
@error = @cmdline.error
|
57
45
|
@status = @cmdline.status
|
58
46
|
end
|
59
|
-
end
|
60
47
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
48
|
+
def xml?
|
49
|
+
false
|
50
|
+
end
|
51
|
+
|
52
|
+
def read_options args
|
53
|
+
opts = options_class.new args
|
54
|
+
opts.to_args
|
55
|
+
end
|
56
|
+
|
57
|
+
def options_class
|
58
|
+
modl = ClassUtil.find_module self.class
|
59
|
+
modl::Options
|
60
|
+
end
|
61
|
+
|
62
|
+
def subcommand
|
63
|
+
melements = ClassUtil.module_elements self.class
|
64
|
+
melements[-1].downcase
|
75
65
|
end
|
76
66
|
end
|
77
67
|
end
|
@@ -8,29 +8,33 @@ module Svnx::Base
|
|
8
8
|
class CommandParams
|
9
9
|
attr_reader :options
|
10
10
|
attr_reader :subcommand
|
11
|
-
attr_reader :cmdline
|
12
11
|
|
13
|
-
def initialize options: nil, subcommand: nil
|
12
|
+
def initialize options: nil, subcommand: nil
|
14
13
|
@options = options
|
15
14
|
@subcommand = subcommand
|
16
|
-
@cmdline = cmdline
|
17
15
|
end
|
18
16
|
end
|
19
17
|
|
20
18
|
class CommandFactory
|
21
19
|
include Logue::Loggable
|
20
|
+
|
21
|
+
def initialize cmdlinefactory = CommandLineFactory.new
|
22
|
+
@cmdlinefactory = cmdlinefactory
|
23
|
+
end
|
22
24
|
|
23
|
-
def create cmdcls, cmdlinecls: nil
|
25
|
+
def create cmdcls, cmdlinecls: nil
|
24
26
|
melements = ClassUtil.module_elements cmdcls
|
25
27
|
|
26
|
-
optcls
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
28
|
+
optcls = begin
|
29
|
+
modl = ClassUtil.find_module cmdcls
|
30
|
+
modl::Options
|
31
|
+
end
|
32
|
+
|
33
|
+
CommandParams.new options: optcls, subcommand: melements[-1].downcase
|
34
|
+
end
|
32
35
|
|
33
|
-
|
36
|
+
def command_line_factory
|
37
|
+
@cmdlinefactory
|
34
38
|
end
|
35
39
|
end
|
36
40
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# -*- ruby -*-
|
3
|
+
|
4
|
+
require 'logue/loggable'
|
5
|
+
require 'svnx/base/command_factory'
|
6
|
+
|
7
|
+
module Svnx::Base
|
8
|
+
class CommandLineFactory
|
9
|
+
include Logue::Loggable
|
10
|
+
|
11
|
+
def create params: nil, subcommand: nil, cls: nil, xml: nil, caching: nil, args: nil
|
12
|
+
cls ||= CommandLine
|
13
|
+
subcommand ||= params.subcommand
|
14
|
+
cls.new subcommand: subcommand, xml: xml, caching: caching, args: args
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# -*- ruby -*-
|
3
|
+
|
4
|
+
require 'svnx/util/classutil'
|
5
|
+
require 'svnx/base/command'
|
6
|
+
|
7
|
+
module Svnx::Base
|
8
|
+
class EntriesCommand < Command
|
9
|
+
attr_reader :entries
|
10
|
+
|
11
|
+
def initialize options, cmdlinecls: nil, caching: caching?
|
12
|
+
super options, cmdlinecls: cmdlinecls, caching: caching
|
13
|
+
|
14
|
+
@entries = if not @output.empty?
|
15
|
+
entries_class = begin
|
16
|
+
modl = ClassUtil.find_module self.class
|
17
|
+
modl::Entries
|
18
|
+
end
|
19
|
+
entries_class.new @output
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def xml?
|
24
|
+
true
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -1,8 +1,10 @@
|
|
1
1
|
#!/usr/bin/ruby -w
|
2
2
|
# -*- ruby -*-
|
3
3
|
|
4
|
-
|
5
|
-
|
4
|
+
require 'svnx/util/strutil'
|
5
|
+
|
6
|
+
module Svnx::Base
|
7
|
+
module Fields
|
6
8
|
# shortcut for "@var = args[:var]", for multiple variable names, which are symbols.
|
7
9
|
def assign args, symbols = Array.new
|
8
10
|
symbols.each do |symbol|
|
@@ -27,7 +29,8 @@ module Svnx
|
|
27
29
|
end
|
28
30
|
|
29
31
|
def fields
|
30
|
-
|
32
|
+
varname = '@fields'
|
33
|
+
self.class.instance_variable_defined?(varname) && self.class.instance_variable_get(varname)
|
31
34
|
end
|
32
35
|
|
33
36
|
module ClassMethods
|
@@ -39,17 +42,14 @@ module Svnx
|
|
39
42
|
# Creates a reader method for each field, and assigns and validates them from an initialize
|
40
43
|
# method, which is also created.
|
41
44
|
def has_fields fields = Hash.new
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
fields.keys.each do |field|
|
46
|
-
attr_reader field
|
45
|
+
fields.each do |name, arg|
|
46
|
+
has_field name, arg
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
50
|
def has_field name, arg
|
51
51
|
@fields ||= Hash.new
|
52
|
-
@fields
|
52
|
+
@fields[name] = arg
|
53
53
|
|
54
54
|
attr_reader name
|
55
55
|
end
|
data/lib/svnx/base/options.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
#!/usr/bin/ruby -w
|
2
2
|
# -*- ruby -*-
|
3
3
|
|
4
|
-
require 'svnx/
|
5
|
-
require 'svnx/
|
4
|
+
require 'svnx/base/fields'
|
5
|
+
require 'svnx/base/tags'
|
6
6
|
|
7
7
|
module Svnx
|
8
8
|
module Base
|
@@ -11,65 +11,9 @@ end
|
|
11
11
|
|
12
12
|
module Svnx::Base
|
13
13
|
class Options
|
14
|
-
include Svnx::
|
15
|
-
|
16
|
-
|
17
|
-
def mapping field
|
18
|
-
case field
|
19
|
-
when :revision
|
20
|
-
to_args "-r", field
|
21
|
-
when :ignorewhitespace, :ignore_whitespace
|
22
|
-
%w{ -x -bw -x --ignore-eol-style }
|
23
|
-
when :paths
|
24
|
-
nil
|
25
|
-
when :path
|
26
|
-
nil
|
27
|
-
when :urls
|
28
|
-
nil
|
29
|
-
when :url
|
30
|
-
nil
|
31
|
-
when :file
|
32
|
-
to_args "--file", field
|
33
|
-
else
|
34
|
-
raise "invalid field '#{field}'"
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
def has(*fields)
|
39
|
-
fields.each do |field|
|
40
|
-
arg = mapping field
|
41
|
-
has_field field, arg
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
def to_args tagname, methname
|
46
|
-
Proc.new { |obj| [ tagname, obj.send(methname) ] }
|
47
|
-
end
|
48
|
-
|
49
|
-
def to_tag sym, invoke = nil
|
50
|
-
tag = "--" + StringUtil.with_dashes(sym)
|
51
|
-
if invoke
|
52
|
-
Proc.new { |x| [ tag, x.send(sym) ] }
|
53
|
-
else
|
54
|
-
tag
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
def has_tag_field name
|
59
|
-
has_field name, to_tag(name)
|
60
|
-
end
|
61
|
-
|
62
|
-
def has_tag_fields(*names)
|
63
|
-
names.each do |name|
|
64
|
-
has_tag_field name
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
def has_tag_argument tagname, methname
|
69
|
-
has_field methname, to_args(tagname, methname)
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
14
|
+
include Svnx::Base::Tags
|
15
|
+
include Svnx::Base::Fields
|
16
|
+
|
73
17
|
def initialize args
|
74
18
|
fkeys = fields.keys
|
75
19
|
|
@@ -0,0 +1,72 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# -*- ruby -*-
|
3
|
+
|
4
|
+
require 'svnx/util/strutil'
|
5
|
+
|
6
|
+
module Svnx::Base
|
7
|
+
module Tags
|
8
|
+
module ClassMethods
|
9
|
+
# common options/tags
|
10
|
+
def mapping field
|
11
|
+
case field
|
12
|
+
when :revision
|
13
|
+
to_args "-r", field
|
14
|
+
when :ignorewhitespace, :ignore_whitespace
|
15
|
+
%w{ -x -bw -x --ignore-eol-style }
|
16
|
+
when :paths
|
17
|
+
nil
|
18
|
+
when :path
|
19
|
+
nil
|
20
|
+
when :urls
|
21
|
+
nil
|
22
|
+
when :url
|
23
|
+
nil
|
24
|
+
when :file
|
25
|
+
to_args "--file", field
|
26
|
+
else
|
27
|
+
raise "invalid field '#{field}'"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def has(*fields)
|
32
|
+
fields.each do |field|
|
33
|
+
arg = mapping field
|
34
|
+
has_field field, arg
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def to_args tagname, methname
|
39
|
+
Proc.new { |obj| [ tagname, obj.send(methname) ] }
|
40
|
+
end
|
41
|
+
|
42
|
+
def to_tag sym, invoke = nil
|
43
|
+
tag = "--" + Svnx::StringUtil.with_dashes(sym)
|
44
|
+
if invoke
|
45
|
+
Proc.new { |x| [ tag, x.send(sym) ] }
|
46
|
+
else
|
47
|
+
tag
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def has_tag_field name
|
52
|
+
has_field name, to_tag(name)
|
53
|
+
end
|
54
|
+
|
55
|
+
def has_tag_fields(*names)
|
56
|
+
names.each do |name|
|
57
|
+
has_tag_field name
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def has_tag_argument tagname, methname
|
62
|
+
has_field methname, to_args(tagname, methname)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
extend ClassMethods
|
67
|
+
|
68
|
+
def self.included other
|
69
|
+
other.extend ClassMethods
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
data/lib/svnx/blame/command.rb
CHANGED
data/lib/svnx/diff/command.rb
CHANGED
@@ -10,7 +10,7 @@ module Svnx::Diff
|
|
10
10
|
attr_reader :entries
|
11
11
|
|
12
12
|
def initialize cmdopts, cmdlinecls: Svnx::Base::CommandLine
|
13
|
-
super cmdopts, cmdlinecls: cmdlinecls,
|
13
|
+
super cmdopts, cmdlinecls: cmdlinecls, caching: true
|
14
14
|
if @output
|
15
15
|
@entries = Svnx::Diff::Parser.new.parse_all_output @output.dup
|
16
16
|
end
|
data/lib/svnx/info/command.rb
CHANGED
data/lib/svnx/log/command.rb
CHANGED
data/lib/svnx/log/entrypath.rb
CHANGED
@@ -17,8 +17,7 @@ module Svnx::Log
|
|
17
17
|
def initialize attr: nil, kind: nil, action: nil, name: nil, prop_mods: nil, text_mods: nil
|
18
18
|
if attr
|
19
19
|
@kind = attribute_value attr, 'kind'
|
20
|
-
|
21
|
-
@action = Svnx::Action.new act
|
20
|
+
@action = Svnx::Action.new(attribute_value attr, 'action')
|
22
21
|
@name = attr.text
|
23
22
|
@prop_mods = "true" == attribute_value(attr, 'prop-mods')
|
24
23
|
@text_mods = "true" == attribute_value(attr, 'text-mods')
|
@@ -35,6 +34,10 @@ module Svnx::Log
|
|
35
34
|
@name
|
36
35
|
end
|
37
36
|
|
37
|
+
def inspect
|
38
|
+
to_s
|
39
|
+
end
|
40
|
+
|
38
41
|
def <=> other
|
39
42
|
name <=> other.name
|
40
43
|
end
|
data/lib/svnx/project.rb
CHANGED
data/lib/svnx/propget/command.rb
CHANGED
data/lib/svnx/status/command.rb
CHANGED
data/lib/svnx/status/entries.rb
CHANGED
@@ -11,9 +11,13 @@ module Svnx::Status
|
|
11
11
|
super lines
|
12
12
|
end
|
13
13
|
|
14
|
+
def xpath
|
15
|
+
'//status/target/entry'
|
16
|
+
end
|
17
|
+
|
14
18
|
def get_elements doc
|
15
19
|
if $use_nokogiri
|
16
|
-
doc.xpath
|
20
|
+
doc.xpath xpath
|
17
21
|
else
|
18
22
|
# status/target
|
19
23
|
doc.elements['status'].elements['target'].elements
|
data/lib/svnx/status/entry.rb
CHANGED
@@ -13,25 +13,22 @@ module Svnx::Status
|
|
13
13
|
class Entry < Svnx::Base::Entry
|
14
14
|
include Comparable
|
15
15
|
|
16
|
-
attr_reader :status
|
17
|
-
attr_reader :path
|
18
|
-
attr_reader :status_revision
|
19
|
-
attr_reader :action
|
20
16
|
attr_reader :commit_revision
|
21
17
|
attr_reader :name
|
18
|
+
attr_reader :path
|
19
|
+
attr_reader :status
|
20
|
+
attr_reader :status_revision
|
22
21
|
|
23
22
|
def initialize xmlelement, rootpath: nil
|
24
23
|
@rootpath = rootpath
|
25
24
|
super xmlelement
|
26
|
-
# @status is an Svnx::Action
|
27
|
-
@action = @status
|
28
25
|
end
|
29
26
|
|
30
27
|
def set_from_element elmt
|
31
28
|
set_attr_var elmt, 'path'
|
32
29
|
|
33
30
|
wcstatus = elmt.at_xpath 'wc-status'
|
34
|
-
@status = Svnx::Action.new
|
31
|
+
@status = Svnx::Action.new wcstatus['item']
|
35
32
|
set_attr_var wcstatus, 'status_revision', 'revision'
|
36
33
|
|
37
34
|
commit = wcstatus.at_xpath 'commit'
|
@@ -45,7 +42,7 @@ module Svnx::Status
|
|
45
42
|
end
|
46
43
|
|
47
44
|
def to_s
|
48
|
-
"
|
45
|
+
" #{@path}: #{@status}"
|
49
46
|
end
|
50
47
|
|
51
48
|
def <=> other
|
data/lib/svnx/util/strutil.rb
CHANGED
@@ -1,14 +1,20 @@
|
|
1
1
|
#!/usr/bin/ruby -w
|
2
2
|
# -*- ruby -*-
|
3
3
|
|
4
|
-
|
5
|
-
class
|
6
|
-
|
7
|
-
|
4
|
+
module Svnx
|
5
|
+
class StringUtil
|
6
|
+
class << self
|
7
|
+
def with_dashes x
|
8
|
+
x.to_s.gsub "_", "-"
|
9
|
+
end
|
10
|
+
|
11
|
+
def with_underscores x
|
12
|
+
x.to_s.gsub "-", "_"
|
13
|
+
end
|
8
14
|
end
|
9
15
|
|
10
|
-
def
|
11
|
-
|
16
|
+
def to_boolean
|
17
|
+
downcase == "true"
|
12
18
|
end
|
13
19
|
end
|
14
20
|
end
|
data/lib/svnx/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: svnx
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeff Pace
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-08-
|
11
|
+
date: 2019-08-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: command-cacheable
|
@@ -145,10 +145,14 @@ files:
|
|
145
145
|
- lib/svnx/base/cmdline.rb
|
146
146
|
- lib/svnx/base/command.rb
|
147
147
|
- lib/svnx/base/command_factory.rb
|
148
|
+
- lib/svnx/base/command_line_factory.rb
|
148
149
|
- lib/svnx/base/entries.rb
|
150
|
+
- lib/svnx/base/entries_command.rb
|
149
151
|
- lib/svnx/base/entry.rb
|
150
152
|
- lib/svnx/base/env.rb
|
153
|
+
- lib/svnx/base/fields.rb
|
151
154
|
- lib/svnx/base/options.rb
|
155
|
+
- lib/svnx/base/tags.rb
|
152
156
|
- lib/svnx/blame/command.rb
|
153
157
|
- lib/svnx/blame/entries.rb
|
154
158
|
- lib/svnx/blame/entry.rb
|
@@ -181,11 +185,6 @@ files:
|
|
181
185
|
- lib/svnx/propget/options.rb
|
182
186
|
- lib/svnx/propset/command.rb
|
183
187
|
- lib/svnx/propset/options.rb
|
184
|
-
- lib/svnx/revision/argfactory.rb
|
185
|
-
- lib/svnx/revision/argument.rb
|
186
|
-
- lib/svnx/revision/date.rb
|
187
|
-
- lib/svnx/revision/error.rb
|
188
|
-
- lib/svnx/revision/range.rb
|
189
188
|
- lib/svnx/status/command.rb
|
190
189
|
- lib/svnx/status/entries.rb
|
191
190
|
- lib/svnx/status/entry.rb
|
@@ -195,7 +194,6 @@ files:
|
|
195
194
|
- lib/svnx/util/classutil.rb
|
196
195
|
- lib/svnx/util/dateutil.rb
|
197
196
|
- lib/svnx/util/englishtime.rb
|
198
|
-
- lib/svnx/util/objutil.rb
|
199
197
|
- lib/svnx/util/strutil.rb
|
200
198
|
- lib/svnx/util/timeutil.rb
|
201
199
|
- lib/svnx/version.rb
|
@@ -1,55 +0,0 @@
|
|
1
|
-
#!/usr/bin/ruby -w
|
2
|
-
# -*- ruby -*-
|
3
|
-
|
4
|
-
module Svnx
|
5
|
-
module Revision
|
6
|
-
RELATIVE_REVISION_RE = Regexp.new '^([\+\-])(\d+)$'
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
|
-
module Svnx::Revision
|
11
|
-
class ArgumentFactory
|
12
|
-
include Logue::Loggable
|
13
|
-
|
14
|
-
DATE_REGEXP = Regexp.new '^\{(.*?)\}'
|
15
|
-
SVN_ARGUMENT_WORDS = %w{ HEAD BASE COMMITTED PREV }
|
16
|
-
|
17
|
-
def create value, args = Hash.new
|
18
|
-
case value
|
19
|
-
when Fixnum
|
20
|
-
create_for_fixnum value, args
|
21
|
-
when String
|
22
|
-
create_for_string value, args
|
23
|
-
when Symbol
|
24
|
-
raise RevisionError.new "symbol not yet handled"
|
25
|
-
when Date
|
26
|
-
# $$$ this (and Time) will probably have to be converted to svn's format
|
27
|
-
raise RevisionError.new "date not yet handled"
|
28
|
-
when Time
|
29
|
-
raise RevisionError.new "time not yet handled"
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
def create_for_fixnum value, args
|
34
|
-
if value < 0
|
35
|
-
# these are log entries:
|
36
|
-
RelativeArgument.new value, entries: args[:entries]
|
37
|
-
else
|
38
|
-
IndexArgument.new value
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
def create_for_string value, args
|
43
|
-
case
|
44
|
-
when SVN_ARGUMENT_WORDS.include?(value)
|
45
|
-
StringArgument.new value
|
46
|
-
when md = RELATIVE_REVISION_RE.match(value)
|
47
|
-
RelativeArgument.new md[0].to_i, entries: args[:entries]
|
48
|
-
when DATE_REGEXP.match(value)
|
49
|
-
StringArgument.new value
|
50
|
-
else
|
51
|
-
IndexArgument.new value.to_i
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
@@ -1,85 +0,0 @@
|
|
1
|
-
#!/usr/bin/ruby -w
|
2
|
-
# -*- ruby -*-
|
3
|
-
|
4
|
-
require 'svnx/log/entries'
|
5
|
-
require 'svnx/revision/error'
|
6
|
-
require 'logue/loggable'
|
7
|
-
require 'svnx/revision/argfactory'
|
8
|
-
|
9
|
-
# We represent what svn calls a revision (-r134:{2010-1-1}) as a Range,
|
10
|
-
# consisting of a from and to (optional) Argument.
|
11
|
-
|
12
|
-
module Svnx
|
13
|
-
module Revision
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
module Svnx::Revision
|
18
|
-
class Argument
|
19
|
-
include Logue::Loggable, Comparable
|
20
|
-
|
21
|
-
# Returns the Nth revision from the given logging output.
|
22
|
-
|
23
|
-
# -n means to count from the end of the list.
|
24
|
-
# +n means to count from the beginning of the list.
|
25
|
-
# n means the literal revision number.
|
26
|
-
|
27
|
-
# these are also valid revisions
|
28
|
-
# :working_copy
|
29
|
-
# :head
|
30
|
-
|
31
|
-
attr_reader :value
|
32
|
-
|
33
|
-
class << self
|
34
|
-
def create value, args = Hash.new
|
35
|
-
ArgumentFactory.new.create value, args
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def initialize value
|
40
|
-
@value = value
|
41
|
-
end
|
42
|
-
|
43
|
-
def to_s
|
44
|
-
@value.to_s
|
45
|
-
end
|
46
|
-
|
47
|
-
def <=> other
|
48
|
-
@value <=> (other.kind_of?(Argument) ? other.value : other)
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
module Svnx::Revision
|
54
|
-
class IndexArgument < Argument
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
module Svnx::Revision
|
59
|
-
class StringArgument < Argument
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
# this is of the form -3, which is revision[-3] (second one from the most
|
64
|
-
# recent; -1 is the most recent).
|
65
|
-
module Svnx::Revision
|
66
|
-
class RelativeArgument < IndexArgument
|
67
|
-
def initialize value, args
|
68
|
-
unless entries = args[:entries]
|
69
|
-
raise RevisionError.new "cannot determine relative revision without entries"
|
70
|
-
end
|
71
|
-
|
72
|
-
nentries = entries.size
|
73
|
-
|
74
|
-
# logentries are in descending order, so the most recent one is index 0
|
75
|
-
|
76
|
-
if value.abs > nentries
|
77
|
-
raise RevisionError.new "ERROR: no entry for revision: #{value.abs}; number of entries: #{nentries}"
|
78
|
-
else
|
79
|
-
idx = value < 0 ? value.abs - 1 : nentries - value
|
80
|
-
log_entry = entries[idx]
|
81
|
-
super log_entry.revision.to_i
|
82
|
-
end
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
data/lib/svnx/revision/date.rb
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
#!/usr/bin/ruby -w
|
2
|
-
# -*- ruby -*-
|
3
|
-
|
4
|
-
module Svnx
|
5
|
-
module Revision
|
6
|
-
end
|
7
|
-
end
|
8
|
-
|
9
|
-
module Svnx::Revision
|
10
|
-
class DateToDate
|
11
|
-
attr_reader :from
|
12
|
-
attr_reader :to
|
13
|
-
|
14
|
-
def initialize from, to
|
15
|
-
@from = from
|
16
|
-
@to = to
|
17
|
-
end
|
18
|
-
|
19
|
-
def to_svn_str
|
20
|
-
[ @from, @to ].collect { |dt| "{" + to_svn_date(dt) + "}" }.join(":")
|
21
|
-
end
|
22
|
-
|
23
|
-
def to_svn_date date
|
24
|
-
date.strftime "%Y-%m-%d"
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
data/lib/svnx/revision/error.rb
DELETED
data/lib/svnx/revision/range.rb
DELETED
@@ -1,54 +0,0 @@
|
|
1
|
-
#!/usr/bin/ruby -w
|
2
|
-
# -*- ruby -*-
|
3
|
-
|
4
|
-
require 'svnx/log/entries'
|
5
|
-
require 'svnx/revision/argument'
|
6
|
-
require 'logue/loggable'
|
7
|
-
|
8
|
-
module Svnx
|
9
|
-
module Revision
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
module Svnx::Revision
|
14
|
-
# this is of the form: -r123:456
|
15
|
-
class Range
|
16
|
-
include Logue::Loggable
|
17
|
-
|
18
|
-
attr_reader :from
|
19
|
-
attr_reader :to
|
20
|
-
|
21
|
-
def initialize from, to = nil, entries = nil
|
22
|
-
if to
|
23
|
-
@from = to_revision from, entries
|
24
|
-
@to = to_revision to, entries
|
25
|
-
elsif from.kind_of? String
|
26
|
-
@from, @to = from.split(':').collect { |x| to_revision x, entries }
|
27
|
-
else
|
28
|
-
@from = to_revision from, entries
|
29
|
-
@to = :working_copy
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
def to_revision val, entries
|
34
|
-
val.kind_of?(Argument) ? val : Argument.create(val, entries: entries)
|
35
|
-
end
|
36
|
-
|
37
|
-
def to_s
|
38
|
-
str = @from.to_s
|
39
|
-
unless working_copy?
|
40
|
-
str << ':' << @to.to_s
|
41
|
-
end
|
42
|
-
str
|
43
|
-
end
|
44
|
-
|
45
|
-
def head?
|
46
|
-
# return true/false instead of true/false/nil
|
47
|
-
@to ? @to.value == 'HEAD' : false
|
48
|
-
end
|
49
|
-
|
50
|
-
def working_copy?
|
51
|
-
@to == nil || @to == :wc || @to == :working_copy
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|