pvn 0.1.1 → 0.1.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 +4 -4
- data/lib/pvn.rb +1 -1
- data/lib/pvn/diff/change.rb +2 -2
- data/lib/pvn/diff/changed_paths.rb +7 -11
- data/lib/pvn/diff/local_path.rb +14 -5
- data/lib/pvn/diff/log_path.rb +6 -3
- data/lib/pvn/diff/log_paths.rb +4 -1
- data/lib/pvn/diff/repository_differ.rb +3 -2
- data/lib/pvn/diff/status_paths.rb +7 -2
- data/lib/pvn/io/element.rb +23 -54
- data/lib/pvn/log/command.rb +34 -7
- data/lib/pvn/log/formatter/path_formatter.rb +6 -2
- data/lib/pvn/pct/local_differ.rb +6 -6
- data/lib/pvn/pct/repository_differ.rb +5 -2
- data/lib/pvn/revision/base_option.rb +7 -6
- data/lib/pvn/seek/path.rb +4 -16
- data/lib/pvn/seek/seeker.rb +3 -4
- data/lib/pvn/status/formatter/entry_formatter.rb +2 -2
- data/test/integration/pvn/diff/changed_paths_test.rb +12 -2
- data/test/integration/pvn/diff/log_paths_test.rb +2 -2
- data/test/integration/pvn/diff/status_paths_test.rb +2 -2
- data/test/integration/pvn/log/command_test.rb +50 -10
- data/test/unit/pvn/io/element/log/log_test.rb +1 -1
- metadata +4 -13
- data/lib/pvn/log/entries.rb +0 -28
- data/lib/pvn/log/user_entries.rb +0 -38
- data/lib/pvn/revision/argument.rb +0 -118
- data/lib/pvn/revision/error.rb +0 -11
- data/lib/pvn/revision/range.rb +0 -50
- data/test/unit/pvn/revision/argument_test.rb +0 -157
- data/test/unit/pvn/revision/range_test.rb +0 -26
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6b0945592450e9be1066e1c2a6e5b1cabd6e4791
|
4
|
+
data.tar.gz: 0634a3af015e06243c293815d5e9f15c838cabfc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d7d422306e8d5e8098954ffc962d43bb962c188069ec292d23a9bfbbd9859968ab9e98fa4b8bd064b666c88f9b92de8d2046a7ca0b0ba9fce8e3384102d8fade
|
7
|
+
data.tar.gz: d3a8cb1fb34373095fb1cde9bd3cb13c5872fd525805cf5d30a929d82d121276cb61c04210d15ddbd4f6f2fc1e185a537bc596c3a4847a6465efc8d4ae516130
|
data/lib/pvn.rb
CHANGED
data/lib/pvn/diff/change.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
#!/usr/bin/ruby -w
|
2
2
|
# -*- ruby -*-
|
3
3
|
|
4
|
-
require 'svnx/action'
|
4
|
+
require 'svnx/base/action'
|
5
5
|
require 'logue/loggable'
|
6
6
|
|
7
7
|
module PVN; module Diff; end; end
|
@@ -16,7 +16,7 @@ module PVN::Diff
|
|
16
16
|
|
17
17
|
def initialize revision, action
|
18
18
|
@revision = to_revision(revision)
|
19
|
-
@action = action.kind_of?(SVNx::Action)
|
19
|
+
@action = action.kind_of?(SVNx::Action) ? action : SVNx::Action.new(action)
|
20
20
|
end
|
21
21
|
|
22
22
|
def to_revision rev
|
@@ -4,7 +4,7 @@
|
|
4
4
|
require 'pvn/diff/log_paths'
|
5
5
|
require 'pvn/diff/status_paths'
|
6
6
|
require 'pvn/diff/local_path'
|
7
|
-
require '
|
7
|
+
require 'svnx/revision/range'
|
8
8
|
require 'logue/loggable'
|
9
9
|
|
10
10
|
module PVN::Diff
|
@@ -17,14 +17,14 @@ module PVN::Diff
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def diff_revision_to_working_copy revision, whitespace
|
20
|
-
|
21
|
-
|
22
|
-
info "
|
23
|
-
rev = PVN::Revision::Range.new revision.to_s, 'HEAD'
|
24
|
-
info "rev: #{rev}".color(:cyan)
|
20
|
+
info "revision: #{revision}"
|
21
|
+
rev = SVNx::Revision::Range.new revision.to_s, 'HEAD'
|
22
|
+
info "rev: #{rev}"
|
25
23
|
|
26
24
|
logpaths = LogPaths.new rev, @paths
|
25
|
+
info "logpaths: #{logpaths}"
|
27
26
|
name_to_logpath = logpaths.to_map
|
27
|
+
info "name_to_logpath: #{name_to_logpath}"
|
28
28
|
|
29
29
|
statuspaths = StatusPaths.new revision, @paths
|
30
30
|
name_to_statuspath = statuspaths.to_map
|
@@ -43,13 +43,9 @@ module PVN::Diff
|
|
43
43
|
|
44
44
|
### $$$ silliness because I don't have Diff::Name integrated:
|
45
45
|
logname = '/' + name
|
46
|
-
|
47
46
|
logpath = name_to_logpath[logname]
|
48
|
-
info "logpaths: #{logpaths}"
|
49
|
-
|
50
47
|
stpath = name_to_statuspath[name]
|
51
|
-
|
52
|
-
|
48
|
+
|
53
49
|
# frrev = nil
|
54
50
|
|
55
51
|
if logpath
|
data/lib/pvn/diff/local_path.rb
CHANGED
@@ -12,17 +12,26 @@ module PVN::Diff
|
|
12
12
|
@elmt = PVN::IO::Element.new :local => @entry.path
|
13
13
|
name = entry.path
|
14
14
|
action = SVNx::Action.new @entry.status
|
15
|
-
|
15
|
+
info "action: #{action}".color('#4addaf')
|
16
|
+
revision = if action.added?
|
17
|
+
0
|
18
|
+
elsif action.unversioned?
|
19
|
+
nil
|
20
|
+
else
|
21
|
+
@elmt.get_info.revision
|
22
|
+
end
|
16
23
|
super name, revision, action, nil
|
17
24
|
end
|
18
25
|
|
19
26
|
def show_diff whitespace = nil
|
20
|
-
|
21
|
-
|
27
|
+
info "@entry.status: #{@entry.status}".color('#22c3c3')
|
28
|
+
# crappy programming here. this should be pushed into PVN::Element.
|
29
|
+
st = @entry.status
|
30
|
+
if st.modified?
|
22
31
|
show_as_modified whitespace
|
23
|
-
|
32
|
+
elsif st.deleted?
|
24
33
|
show_as_deleted
|
25
|
-
|
34
|
+
elsif st.added?
|
26
35
|
show_as_added
|
27
36
|
end
|
28
37
|
end
|
data/lib/pvn/diff/log_path.rb
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
|
4
4
|
require 'pvn/io/element'
|
5
5
|
require 'pvn/diff/path'
|
6
|
+
require 'svnx/revision/argument'
|
6
7
|
|
7
8
|
module PVN::Diff
|
8
9
|
# this is a path wrapping a log entry; it could also be a RemotePath or a
|
@@ -50,7 +51,7 @@ module PVN::Diff
|
|
50
51
|
displaypath = get_display_path
|
51
52
|
|
52
53
|
rev_change = changes.detect do |chg|
|
53
|
-
revarg =
|
54
|
+
revarg = SVNx::Revision::Argument.create chg.revision
|
54
55
|
revarg > revision.from
|
55
56
|
end
|
56
57
|
|
@@ -73,6 +74,8 @@ module PVN::Diff
|
|
73
74
|
def get_diff_revision change, revision
|
74
75
|
# find the first revision where logpath was in svn, no earlier than the
|
75
76
|
# revision.from value
|
77
|
+
info "change: #{change.class}"
|
78
|
+
info "change.action: #{change.action}"
|
76
79
|
if change.action.added?
|
77
80
|
change.revision.to_i
|
78
81
|
elsif change.revision.to_i >= revision.from.value
|
@@ -126,8 +129,8 @@ module PVN::Diff
|
|
126
129
|
|
127
130
|
def revisions_later_than revision
|
128
131
|
changes.select do |chg|
|
129
|
-
x =
|
130
|
-
y =
|
132
|
+
x = SVNx::Revision::Argument.create chg.revision
|
133
|
+
y = SVNx::Revision::Argument.create revision
|
131
134
|
x > y
|
132
135
|
end
|
133
136
|
end
|
data/lib/pvn/diff/log_paths.rb
CHANGED
@@ -26,12 +26,15 @@ module PVN::Diff
|
|
26
26
|
end
|
27
27
|
|
28
28
|
def add_path logentry, logentrypath, pathinfo
|
29
|
+
info "logentry: #{logentry}".color('#fa3d3d')
|
30
|
+
|
29
31
|
name = logentrypath.name
|
30
32
|
revision = logentry.revision
|
31
33
|
action = logentrypath.action
|
34
|
+
info "action: #{action}"
|
32
35
|
url = pathinfo.url
|
33
36
|
|
34
|
-
info "action: #{action}"
|
37
|
+
info "action: #{action}".color('#fa3d3d')
|
35
38
|
info "url: #{url}"
|
36
39
|
|
37
40
|
path = @elements.detect { |element| element.name == name }
|
@@ -32,8 +32,9 @@ module PVN::Diff
|
|
32
32
|
# (argument); this only handling revision numbers (not dates) for now.
|
33
33
|
|
34
34
|
rev = change ? [ change.to_i - 1, change.to_i ] : options.revision
|
35
|
-
|
36
|
-
|
35
|
+
from, to = rev[0], rev[1]
|
36
|
+
|
37
|
+
@revision = SVNx::Revision::Range.new from, to
|
37
38
|
info "@revision: #{@revision}"
|
38
39
|
|
39
40
|
# this indicates that this should be split into two classes:
|
@@ -20,9 +20,13 @@ module PVN::Diff
|
|
20
20
|
|
21
21
|
def add elmt, url
|
22
22
|
status = elmt.find_files_by_status
|
23
|
+
info "status: #{status}".color('#33facc')
|
23
24
|
status.entries.each do |entry|
|
25
|
+
info "entry: #{entry}".color('#33facc')
|
24
26
|
# we don't care about unversioned entries for diffing.
|
25
|
-
|
27
|
+
info "entry.status: #{entry.status}".color('#33facc')
|
28
|
+
info "entry.status.class: #{entry.status.class}".color('#33facc')
|
29
|
+
next if entry.status.unversioned?
|
26
30
|
|
27
31
|
# svn log prepends /; svn status does not
|
28
32
|
# name = '/' + entry.path
|
@@ -49,9 +53,10 @@ module PVN::Diff
|
|
49
53
|
# else
|
50
54
|
# it is compared to BASE
|
51
55
|
|
52
|
-
info "status_entry.status: #{status_entry.status}"
|
56
|
+
info "status_entry.status: #{status_entry.status}".color('#2c2cdd')
|
53
57
|
|
54
58
|
action = SVNx::Action.new status_entry.status
|
59
|
+
info "action: #{action}".color('#2c2cdd')
|
55
60
|
case
|
56
61
|
when action.added?
|
57
62
|
info "added"
|
data/lib/pvn/io/element.rb
CHANGED
@@ -5,9 +5,12 @@ require 'rubygems'
|
|
5
5
|
require 'logue/loggable'
|
6
6
|
require 'svnx/log/entries'
|
7
7
|
require 'svnx/status/entries'
|
8
|
+
require 'svnx/status/command'
|
8
9
|
require 'svnx/info/entries'
|
10
|
+
require 'svnx/info/command'
|
11
|
+
require 'svnx/cat/command'
|
9
12
|
require 'pvn/io/fselement'
|
10
|
-
require 'svnx/
|
13
|
+
require 'svnx/io/element'
|
11
14
|
|
12
15
|
module PVN; module IO; end; end
|
13
16
|
|
@@ -33,6 +36,9 @@ module PVN::IO
|
|
33
36
|
@path = args[:path]
|
34
37
|
|
35
38
|
info "local: #{@local.inspect}"
|
39
|
+
|
40
|
+
@svnelement = SVNx::IO::Element.new args
|
41
|
+
info "@svnelement: #{@svnelement}"
|
36
42
|
end
|
37
43
|
|
38
44
|
def exist?
|
@@ -40,28 +46,17 @@ module PVN::IO
|
|
40
46
|
end
|
41
47
|
|
42
48
|
def directory?
|
43
|
-
|
44
|
-
@local.directory?
|
45
|
-
else
|
46
|
-
# look it up with svn info
|
47
|
-
false
|
48
|
-
end
|
49
|
+
@svnelement.directory?
|
49
50
|
end
|
50
51
|
|
51
52
|
def file?
|
52
|
-
|
53
|
-
@local.file?
|
54
|
-
else
|
55
|
-
raise "need this"
|
56
|
-
end
|
53
|
+
@svnelement.file?
|
57
54
|
end
|
58
55
|
|
59
56
|
def get_info revision = nil
|
60
57
|
usepath = @local || @path
|
61
|
-
|
62
|
-
|
63
|
-
infentries = SVNx::Info::Entries.new :xmllines => output
|
64
|
-
infentries[0]
|
58
|
+
inf = SVNx::InfoExec.new path: usepath, revision: revision
|
59
|
+
inf.entry
|
65
60
|
end
|
66
61
|
|
67
62
|
def repo_root
|
@@ -80,29 +75,14 @@ module PVN::IO
|
|
80
75
|
end
|
81
76
|
end
|
82
77
|
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
filter = svninfo.url.dup
|
88
|
-
filter.slice! svninfo.root
|
89
|
-
|
90
|
-
# we can't cache this, because we don't know if there has been an svn
|
91
|
-
# update since the previous run:
|
92
|
-
xmllines = SVNx::Exec.new.log @local, revision, nil, true, false
|
93
|
-
entries = SVNx::Log::Entries.new :xmllines => xmllines
|
94
|
-
|
95
|
-
modified = Set.new
|
96
|
-
|
97
|
-
entries.each do |entry|
|
98
|
-
entry.paths.each do |epath|
|
99
|
-
if epath.action == 'M' && epath.name.start_with?(filter)
|
100
|
-
modified << epath
|
101
|
-
end
|
102
|
-
end
|
103
|
-
end
|
78
|
+
def status_to_symbol status
|
79
|
+
# add a ? if not there already
|
80
|
+
(status.to_s.sub(%r{\??$}, '?')).to_sym
|
81
|
+
end
|
104
82
|
|
105
|
-
|
83
|
+
# returns a set of entries matching status for the given revision
|
84
|
+
def find_entries revision, status
|
85
|
+
@svnelement.find_in_log revision, status
|
106
86
|
end
|
107
87
|
|
108
88
|
def cat revision, use_cache = false
|
@@ -116,29 +96,18 @@ module PVN::IO
|
|
116
96
|
path << '@' << revision.to_s
|
117
97
|
end
|
118
98
|
info "path: #{path}"
|
119
|
-
SVNx::
|
99
|
+
catexec = SVNx::CatExec.new path: path, revision: nil, use_cache: use_cache
|
100
|
+
catexec.output
|
120
101
|
end
|
121
102
|
|
122
|
-
# returns a set of local files that
|
103
|
+
# returns a set of local files that have the given status/action
|
123
104
|
def find_files_by_status status = nil
|
124
|
-
|
125
|
-
entries = SVNx::Status::Entries.new :xmllines => xmllines
|
126
|
-
|
127
|
-
entries.select do |entry|
|
128
|
-
status.nil? || entry.status == status
|
129
|
-
end
|
130
|
-
end
|
131
|
-
|
132
|
-
# returns a set of local files that are in modified status
|
133
|
-
def find_modified_files
|
134
|
-
find_files_by_status 'modified'
|
105
|
+
@svnelement.find_by_status status
|
135
106
|
end
|
136
107
|
|
137
108
|
# returns log entries
|
138
109
|
def logentries revision
|
139
|
-
|
140
|
-
xmllines = SVNx::Exec.new.log @local, revision.to_s, nil, true, false
|
141
|
-
SVNx::Log::Entries.new :xmllines => xmllines
|
110
|
+
@svnelement.log_entries :revision => revision
|
142
111
|
end
|
143
112
|
|
144
113
|
def <=> other
|
data/lib/pvn/log/command.rb
CHANGED
@@ -5,8 +5,7 @@ require 'pvn/io/element'
|
|
5
5
|
require 'pvn/log/formatter/entries_formatter'
|
6
6
|
require 'pvn/log/options'
|
7
7
|
require 'pvn/command/command'
|
8
|
-
require '
|
9
|
-
require 'pvn/log/user_entries'
|
8
|
+
require 'svnx/log/command'
|
10
9
|
|
11
10
|
module PVN::Log
|
12
11
|
class Command < PVN::Command::Command
|
@@ -41,11 +40,39 @@ module PVN::Log
|
|
41
40
|
info "paths: #{paths}"
|
42
41
|
|
43
42
|
allentries = Array.new
|
44
|
-
|
45
|
-
entcls = options.user ? UserEntries : Entries
|
46
43
|
|
47
|
-
|
48
|
-
|
44
|
+
args = { revision: options.revision, limit: options.limit, files: options.files, use_cache: false }
|
45
|
+
|
46
|
+
if options.user
|
47
|
+
limit = args[:limit]
|
48
|
+
args[:limit] = nil
|
49
|
+
args[:user] = options.user
|
50
|
+
|
51
|
+
paths.each do |path|
|
52
|
+
args[:path] = path
|
53
|
+
|
54
|
+
exec = SVNx::LogExec.new args
|
55
|
+
# SVNx::Entries => Array entries:
|
56
|
+
|
57
|
+
userentries = Hash.new
|
58
|
+
exec.entries.entries.each do |entry|
|
59
|
+
break if userentries.size >= limit
|
60
|
+
if entry.author == args[:user]
|
61
|
+
userentries[userentries.size] = entry
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
raise "ERROR: no matching log entries for '#{args[:user]}'" if userentries.empty?
|
66
|
+
|
67
|
+
allentries.concat userentries.values
|
68
|
+
end
|
69
|
+
else
|
70
|
+
paths.each do |path|
|
71
|
+
args[:path] = path
|
72
|
+
exec = SVNx::LogExec.new args
|
73
|
+
# SVNx::Entries => Array entries:
|
74
|
+
allentries.concat exec.entries.entries
|
75
|
+
end
|
49
76
|
end
|
50
77
|
|
51
78
|
# we can show relative revisions for a single path, without filtering by
|
@@ -58,7 +85,7 @@ module PVN::Log
|
|
58
85
|
from_tail = show_relative && !options.limit
|
59
86
|
|
60
87
|
ef = PVN::Log::EntriesFormatter.new options.color, allentries, from_head, from_tail
|
61
|
-
puts ef.format
|
88
|
+
$io.puts ef.format
|
62
89
|
end
|
63
90
|
end
|
64
91
|
end
|
@@ -11,7 +11,11 @@ module PVN::Log
|
|
11
11
|
'M' => :modified,
|
12
12
|
'A' => :added,
|
13
13
|
'D' => :deleted,
|
14
|
-
'R' => :renamed
|
14
|
+
'R' => :renamed,
|
15
|
+
SVNx::Action::MODIFIED => :modified,
|
16
|
+
SVNx::Action::ADDED => :added,
|
17
|
+
SVNx::Action::DELETED => :deleted,
|
18
|
+
# SVNx::Action::RENAMED => :renamed
|
15
19
|
}
|
16
20
|
|
17
21
|
def initialize use_colors, paths
|
@@ -26,7 +30,7 @@ module PVN::Log
|
|
26
30
|
if field = PATH_ACTIONS[path.action]
|
27
31
|
pstr << colorize(path.name, field)
|
28
32
|
else
|
29
|
-
raise "wtf?: #{path.action}"
|
33
|
+
raise "wtf?: #{path.action.inspect}; #{path.action.class}"
|
30
34
|
end
|
31
35
|
|
32
36
|
if path.kind == 'dir'
|
data/lib/pvn/pct/local_differ.rb
CHANGED
@@ -3,14 +3,14 @@
|
|
3
3
|
|
4
4
|
require 'pvn/io/element'
|
5
5
|
require 'pvn/pct/differ'
|
6
|
-
require 'svnx/exec'
|
7
6
|
|
8
7
|
module PVN::Pct
|
9
8
|
class LocalDiffer < Differ
|
10
9
|
def get_diff_counts path, options
|
11
10
|
elmt = PVN::IO::Element.new :local => path
|
12
|
-
modified = elmt.
|
13
|
-
|
11
|
+
modified = elmt.find_files_by_status :modified
|
12
|
+
info "modified: #{modified}".color('#fa4434')
|
13
|
+
|
14
14
|
# total = PVN::DiffCount.new
|
15
15
|
|
16
16
|
modified = modified.sort_by { |n| n.path }
|
@@ -18,9 +18,9 @@ module PVN::Pct
|
|
18
18
|
diff_counts = Array.new
|
19
19
|
|
20
20
|
modified.each do |entry|
|
21
|
-
info "entry.path: #{entry.path}"
|
22
|
-
|
23
|
-
svn_count =
|
21
|
+
info "entry.path: #{entry.path}".color('#fa4434')
|
22
|
+
catexec = SVNx::CatExec.new path: entry.path, revision: nil, use_cache: false
|
23
|
+
svn_count = catexec.output.size
|
24
24
|
local_count = Pathname.new(entry.path).readlines.size
|
25
25
|
|
26
26
|
dc = PVN::DiffCount.new svn_count, local_count, entry.path
|
@@ -3,7 +3,7 @@
|
|
3
3
|
|
4
4
|
require 'pvn/io/element'
|
5
5
|
require 'pvn/pct/differ'
|
6
|
-
require '
|
6
|
+
require 'svnx/revision/range'
|
7
7
|
require 'rainbow'
|
8
8
|
|
9
9
|
module PVN::Pct
|
@@ -21,7 +21,7 @@ module PVN::Pct
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def get_modified elmt, fromrev, torev
|
24
|
-
modified = elmt.
|
24
|
+
modified = elmt.find_entries [ fromrev + ':' + torev ], :modified
|
25
25
|
modified.collect { |m| m.name }.sort.uniq
|
26
26
|
end
|
27
27
|
|
@@ -45,12 +45,14 @@ module PVN::Pct
|
|
45
45
|
|
46
46
|
def get_diff_counts path, options
|
47
47
|
revision = options.revision
|
48
|
+
info "revision: #{revision}".color('#fafa33')
|
48
49
|
|
49
50
|
# revision -r20 is like diff -c20:
|
50
51
|
fromrev, torev = get_from_to_revisions revision
|
51
52
|
|
52
53
|
elmt = PVN::IO::Element.new :local => path
|
53
54
|
modnames = get_modified elmt, fromrev, torev
|
55
|
+
info "modnames: #{modnames}"
|
54
56
|
|
55
57
|
reporoot = elmt.repo_root
|
56
58
|
|
@@ -64,6 +66,7 @@ module PVN::Pct
|
|
64
66
|
modnames.each do |mod|
|
65
67
|
fullpath = reporoot + mod
|
66
68
|
elmt = PVN::IO::Element.new :path => fullpath
|
69
|
+
info "elmt: #{elmt}"
|
67
70
|
|
68
71
|
next unless has_revisions? elmt, fromrev, torev
|
69
72
|
next if directory? elmt
|
@@ -2,7 +2,7 @@
|
|
2
2
|
# -*- ruby -*-
|
3
3
|
|
4
4
|
require 'synoption/option'
|
5
|
-
require 'svnx/
|
5
|
+
require 'svnx/revision/argument'
|
6
6
|
|
7
7
|
module PVN
|
8
8
|
class BaseRevisionOption < Synoption::Option
|
@@ -19,22 +19,23 @@ module PVN
|
|
19
19
|
|
20
20
|
def resolve_value optset, unprocessed
|
21
21
|
val = value
|
22
|
-
if
|
22
|
+
if SVNx::Revision::RELATIVE_REVISION_RE.match val
|
23
23
|
@value = relative_to_absolute val, unprocessed[0]
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
27
|
def relative_to_absolute rel, path
|
28
28
|
limit = rel[0, 1] == '-' ? rel.to_i.abs : nil
|
29
|
-
|
30
|
-
|
29
|
+
entries = run_log_command limit, path
|
30
|
+
|
31
31
|
# This is Argument, not Range, because we're getting the value
|
32
|
-
reventry =
|
32
|
+
reventry = SVNx::Revision::Argument.create rel, entries: entries
|
33
33
|
reventry.value.to_s
|
34
34
|
end
|
35
35
|
|
36
36
|
def run_log_command limit, path
|
37
|
-
SVNx::
|
37
|
+
logexec = SVNx::LogExec.new path: path, limit: limit, revision: nil, verbose: false, use_cache: false
|
38
|
+
logexec.entries
|
38
39
|
end
|
39
40
|
|
40
41
|
def entry
|
data/lib/pvn/seek/path.rb
CHANGED
@@ -2,23 +2,10 @@
|
|
2
2
|
# -*- ruby -*-
|
3
3
|
|
4
4
|
require 'logue/loggable'
|
5
|
-
require 'pvn/log/entries'
|
6
5
|
require 'pvn/seek/seeker'
|
6
|
+
require 'svnx/log/command'
|
7
7
|
|
8
8
|
module PVN::Seek
|
9
|
-
class PathLogOptions
|
10
|
-
def initialize revision
|
11
|
-
@revision = revision
|
12
|
-
end
|
13
|
-
|
14
|
-
def limit; nil; end
|
15
|
-
def verbose; nil; end
|
16
|
-
def revision; @revision; end
|
17
|
-
def user; nil; end
|
18
|
-
def use_cache; nil; end
|
19
|
-
def files; end
|
20
|
-
end
|
21
|
-
|
22
9
|
class Path
|
23
10
|
include Logue::Loggable
|
24
11
|
|
@@ -36,8 +23,9 @@ module PVN::Seek
|
|
36
23
|
end
|
37
24
|
|
38
25
|
def get_entries revision
|
39
|
-
|
40
|
-
|
26
|
+
args = { revision: revision, limit: nil, files: nil, use_cache: nil, path: @path }
|
27
|
+
exec = SVNx::LogExec.new args
|
28
|
+
exec.entries.to_a
|
41
29
|
end
|
42
30
|
|
43
31
|
def show_no_match type, entries
|
data/lib/pvn/seek/seeker.rb
CHANGED
@@ -1,10 +1,9 @@
|
|
1
1
|
#!/usr/bin/ruby -w
|
2
2
|
# -*- ruby -*-
|
3
3
|
|
4
|
-
require 'pvn/log/entries'
|
5
4
|
require 'logue/loggable'
|
6
|
-
require 'svnx/exec'
|
7
5
|
require 'pvn/seek/match'
|
6
|
+
require 'svnx/cat/command'
|
8
7
|
|
9
8
|
module PVN::Seek
|
10
9
|
class Seeker
|
@@ -18,8 +17,8 @@ module PVN::Seek
|
|
18
17
|
end
|
19
18
|
|
20
19
|
def cat revision
|
21
|
-
ex = SVNx::
|
22
|
-
ex.
|
20
|
+
ex = SVNx::CatExec.new path: @path, revision: revision, use_cache: true
|
21
|
+
ex.output
|
23
22
|
end
|
24
23
|
|
25
24
|
def matches? previous_entry, current_entry
|
@@ -17,9 +17,9 @@ module PVN::Status
|
|
17
17
|
def format
|
18
18
|
lines = Array.new
|
19
19
|
lines << if use_colors
|
20
|
-
" " + colorize(entry.path, entry.status.
|
20
|
+
" " + colorize(entry.path, entry.status.type)
|
21
21
|
else
|
22
|
-
"#{entry.status[0 .. 0].upcase} #{entry.path}"
|
22
|
+
"#{entry.status.type.to_s[0 .. 0].upcase} #{entry.path}"
|
23
23
|
end
|
24
24
|
lines
|
25
25
|
end
|
@@ -20,9 +20,19 @@ module PVN::Diff
|
|
20
20
|
if Logue::Log.verbose
|
21
21
|
puts strio.string
|
22
22
|
end
|
23
|
-
|
23
|
+
|
24
24
|
actlines = strio.string.split "\n"
|
25
25
|
|
26
|
+
if false
|
27
|
+
puts "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
|
28
|
+
puts actlines
|
29
|
+
puts "&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&"
|
30
|
+
|
31
|
+
puts "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
|
32
|
+
puts explines
|
33
|
+
puts "&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&"
|
34
|
+
end
|
35
|
+
|
26
36
|
assert_arrays_equal explines, actlines
|
27
37
|
|
28
38
|
$io = $stdout
|
@@ -99,7 +109,7 @@ module PVN::Diff
|
|
99
109
|
|
100
110
|
# -r20 means -r20:working_copy
|
101
111
|
|
102
|
-
revision =
|
112
|
+
revision = SVNx::Revision::Range.new 20, nil
|
103
113
|
whitespace = false
|
104
114
|
paths = %w{ . }
|
105
115
|
|
@@ -3,7 +3,7 @@
|
|
3
3
|
|
4
4
|
require 'integration/tc'
|
5
5
|
require 'pvn/diff/log_paths'
|
6
|
-
require '
|
6
|
+
require 'svnx/revision/range'
|
7
7
|
|
8
8
|
module PVN::Diff
|
9
9
|
class LogPathsTestCase < PVN::IntegrationTestCase
|
@@ -15,7 +15,7 @@ module PVN::Diff
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def test_revision_to_revision
|
18
|
-
revision =
|
18
|
+
revision = SVNx::Revision::Range.new '15', '16'
|
19
19
|
paths = %w{ . }
|
20
20
|
logpaths = LogPaths.new revision, paths
|
21
21
|
exppaths = [
|
@@ -2,7 +2,7 @@
|
|
2
2
|
# -*- ruby -*-
|
3
3
|
|
4
4
|
require 'pvn/diff/status_paths'
|
5
|
-
require '
|
5
|
+
require 'svnx/revision/range'
|
6
6
|
require 'pp'
|
7
7
|
require 'integration/tc'
|
8
8
|
|
@@ -17,7 +17,7 @@ module PVN::Diff
|
|
17
17
|
|
18
18
|
def test_to_working_copy
|
19
19
|
# revision doesn't matter:
|
20
|
-
revision =
|
20
|
+
revision = SVNx::Revision::Range.new '20'
|
21
21
|
paths = %w{ . }
|
22
22
|
statuspaths = StatusPaths.new revision, paths
|
23
23
|
expnames = [
|
@@ -7,21 +7,14 @@ require 'stringio'
|
|
7
7
|
|
8
8
|
module PVN::Log
|
9
9
|
class CommandTest < PVN::IntegrationTestCase
|
10
|
-
|
11
|
-
def test_path
|
12
|
-
Command.new [ PT_DIRNAME ]
|
13
|
-
end
|
14
|
-
|
15
10
|
def test_invalid_path
|
16
11
|
assert_raises(RuntimeError) do
|
17
12
|
Command.new %w{ /this/doesnt/exist }
|
18
13
|
end
|
19
14
|
end
|
20
15
|
|
21
|
-
def
|
22
|
-
|
23
|
-
# fetch_log_in_pieces (-n LIMIT, LIMIT * 2, LIMIT * 4, LIMIT * 8 ... )
|
24
|
-
# PVN::Log::Command.new [ PT_DIRNAME ]
|
16
|
+
def assert_command_output expected, args = Array.new
|
17
|
+
super PVN::Log::Command, expected, args
|
25
18
|
end
|
26
19
|
|
27
20
|
def test_doc
|
@@ -80,7 +73,54 @@ module PVN::Log
|
|
80
73
|
" Prints log entries only for user 'barney', with the default limit.",
|
81
74
|
]
|
82
75
|
|
83
|
-
assert_command_output
|
76
|
+
assert_command_output expected, %w{ -h }
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_command_default
|
80
|
+
expected = Array.new
|
81
|
+
expected << "\e[1m22\e[0m \e[1m-1\e[0m \e[1m\e[36mLyle\e[0m \e[1m\e[35m12-09-18 11:32:19\e[0m"
|
82
|
+
expected << ""
|
83
|
+
expected << "\e[37mDon't pay no attention to that alky. He can't hold a gun, much less shoot it.\e[0m"
|
84
|
+
expected << ""
|
85
|
+
expected << "-------------------------------------------------------"
|
86
|
+
expected << "\e[1m21\e[0m \e[1m-2\e[0m \e[1m\e[36mGovernor William J. Le Petomane\e[0m \e[1m\e[35m12-09-18 11:30:10\e[0m"
|
87
|
+
expected << ""
|
88
|
+
expected << "\e[37mWe've gotta protect our phoney baloney jobs, gentlemen!\e[0m"
|
89
|
+
expected << ""
|
90
|
+
expected << "-------------------------------------------------------"
|
91
|
+
expected << "\e[1m20\e[0m \e[1m-3\e[0m \e[1m\e[36mHoward Johnson\e[0m \e[1m\e[35m12-09-18 11:28:08\e[0m"
|
92
|
+
expected << ""
|
93
|
+
expected << "\e[37mY'know, Nietzsche says: \"Out of chaos comes order.\"\e[0m"
|
94
|
+
expected << ""
|
95
|
+
expected << "-------------------------------------------------------"
|
96
|
+
expected << "\e[1m19\e[0m \e[1m-4\e[0m \e[1m\e[36mLili von Shtupp\e[0m \e[1m\e[35m12-09-16 14:24:07\e[0m"
|
97
|
+
expected << ""
|
98
|
+
expected << "\e[37m\e[0m"
|
99
|
+
expected << ""
|
100
|
+
expected << "-------------------------------------------------------"
|
101
|
+
expected << "\e[1m18\e[0m \e[1m-5\e[0m \e[1m\e[36mLili von Shtupp\e[0m \e[1m\e[35m12-09-16 14:09:45\e[0m"
|
102
|
+
expected << ""
|
103
|
+
expected << "\e[37mWillkommen, Bienvenue, Welcome, C'mon in.\e[0m"
|
104
|
+
expected << ""
|
105
|
+
expected << "-------------------------------------------------------"
|
106
|
+
|
107
|
+
assert_command_output expected
|
108
|
+
end
|
109
|
+
|
110
|
+
def test_command_user
|
111
|
+
expected = Array.new
|
112
|
+
expected << "\e[1m13\e[0m \e[1m\e[36mJim\e[0m \e[1m\e[35m12-09-16 13:51:55\e[0m"
|
113
|
+
expected << ""
|
114
|
+
expected << "\e[37mWe're not sure. Are we...black?\e[0m"
|
115
|
+
expected << ""
|
116
|
+
expected << "-------------------------------------------------------"
|
117
|
+
expected << "\e[1m3\e[0m \e[1m\e[36mJim\e[0m \e[1m\e[35m12-09-15 17:29:15\e[0m"
|
118
|
+
expected << ""
|
119
|
+
expected << "\e[37mBoy, is he strict!\e[0m"
|
120
|
+
expected << ""
|
121
|
+
expected << "-------------------------------------------------------"
|
122
|
+
|
123
|
+
assert_command_output expected, %w{ -u Jim }
|
84
124
|
end
|
85
125
|
end
|
86
126
|
end
|
@@ -7,7 +7,7 @@ require 'pvn/io/element'
|
|
7
7
|
require 'resources'
|
8
8
|
|
9
9
|
module PVN::IO::IOElement
|
10
|
-
class LogTestCase
|
10
|
+
class LogTestCase ### < PVN::Log::TestCase
|
11
11
|
def assert_log_entries_size expsize, dirlog
|
12
12
|
assert_equal expsize, dirlog.entries.size
|
13
13
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pvn
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeff Pace
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-11-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: synoption
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - '>='
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.0
|
33
|
+
version: 0.3.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 0.0
|
40
|
+
version: 0.3.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: riel
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -107,7 +107,6 @@ files:
|
|
107
107
|
- lib/pvn/io/element.rb
|
108
108
|
- lib/pvn/io/fselement.rb
|
109
109
|
- lib/pvn/log/command.rb
|
110
|
-
- lib/pvn/log/entries.rb
|
111
110
|
- lib/pvn/log/formatter/date_formatter.rb
|
112
111
|
- lib/pvn/log/formatter/entries_formatter.rb
|
113
112
|
- lib/pvn/log/formatter/entry_formatter.rb
|
@@ -116,17 +115,13 @@ files:
|
|
116
115
|
- lib/pvn/log/formatter/path_formatter.rb
|
117
116
|
- lib/pvn/log/formatter/summary_formatter.rb
|
118
117
|
- lib/pvn/log/options.rb
|
119
|
-
- lib/pvn/log/user_entries.rb
|
120
118
|
- lib/pvn/pct/command.rb
|
121
119
|
- lib/pvn/pct/differ.rb
|
122
120
|
- lib/pvn/pct/local_differ.rb
|
123
121
|
- lib/pvn/pct/options.rb
|
124
122
|
- lib/pvn/pct/repository_differ.rb
|
125
|
-
- lib/pvn/revision/argument.rb
|
126
123
|
- lib/pvn/revision/base_option.rb
|
127
|
-
- lib/pvn/revision/error.rb
|
128
124
|
- lib/pvn/revision/multiple_revisions_option.rb
|
129
|
-
- lib/pvn/revision/range.rb
|
130
125
|
- lib/pvn/revision/revision_option.rb
|
131
126
|
- lib/pvn/revision/revision_regexp_option.rb
|
132
127
|
- lib/pvn/seek/command.rb
|
@@ -159,9 +154,7 @@ files:
|
|
159
154
|
- test/unit/pvn/io/element/log/log_test.rb
|
160
155
|
- test/unit/pvn/log/formatter/entry_formatter_test.rb
|
161
156
|
- test/unit/pvn/log/options_test.rb
|
162
|
-
- test/unit/pvn/revision/argument_test.rb
|
163
157
|
- test/unit/pvn/revision/multiple_revisions_option_test.rb
|
164
|
-
- test/unit/pvn/revision/range_test.rb
|
165
158
|
- test/unit/pvn/revision/revision_option_test.rb
|
166
159
|
- test/unit/pvn/revision/revision_regexp_option_test.rb
|
167
160
|
homepage: http://www.incava.org/projects/pvn
|
@@ -205,8 +198,6 @@ test_files:
|
|
205
198
|
- test/unit/pvn/io/element/log/log_test.rb
|
206
199
|
- test/unit/pvn/log/formatter/entry_formatter_test.rb
|
207
200
|
- test/unit/pvn/log/options_test.rb
|
208
|
-
- test/unit/pvn/revision/argument_test.rb
|
209
201
|
- test/unit/pvn/revision/multiple_revisions_option_test.rb
|
210
|
-
- test/unit/pvn/revision/range_test.rb
|
211
202
|
- test/unit/pvn/revision/revision_option_test.rb
|
212
203
|
- test/unit/pvn/revision/revision_regexp_option_test.rb
|
data/lib/pvn/log/entries.rb
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
#!/usr/bin/ruby -w
|
2
|
-
# -*- ruby -*-
|
3
|
-
|
4
|
-
require 'logue/loggable'
|
5
|
-
require 'svnx/exec'
|
6
|
-
require 'svnx/log/entries'
|
7
|
-
|
8
|
-
module PVN::Log
|
9
|
-
class Entries < SVNx::Log::Entries
|
10
|
-
include Logue::Loggable
|
11
|
-
|
12
|
-
def initialize path, options
|
13
|
-
revision = options.revision
|
14
|
-
limit = limit options
|
15
|
-
verbose = options.files
|
16
|
-
|
17
|
-
# we can't cache this, because we don't know if there has been an svn
|
18
|
-
# update since the previous run:
|
19
|
-
use_cache = false
|
20
|
-
xmllines = SVNx::Exec.new.log path, revision, limit, verbose, use_cache
|
21
|
-
super :xmllines => xmllines
|
22
|
-
end
|
23
|
-
|
24
|
-
def limit options
|
25
|
-
options.limit
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
data/lib/pvn/log/user_entries.rb
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
#!/usr/bin/ruby -w
|
2
|
-
# -*- ruby -*-
|
3
|
-
|
4
|
-
require 'pvn/log/entries'
|
5
|
-
require 'logue/loggable'
|
6
|
-
|
7
|
-
module PVN::Log
|
8
|
-
class UserEntries < PVN::Log::Entries
|
9
|
-
include Logue::Loggable
|
10
|
-
|
11
|
-
def initialize path, options
|
12
|
-
@user = options.user
|
13
|
-
@limit = options.limit
|
14
|
-
|
15
|
-
super
|
16
|
-
|
17
|
-
filter_entries_for_user
|
18
|
-
end
|
19
|
-
|
20
|
-
def limit options
|
21
|
-
nil
|
22
|
-
end
|
23
|
-
|
24
|
-
def filter_entries_for_user
|
25
|
-
userentries = Hash.new
|
26
|
-
each do |entry|
|
27
|
-
break if userentries.size >= @limit
|
28
|
-
if entry.author == @user
|
29
|
-
userentries[userentries.size] = entry
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
raise "ERROR: no matching log entries for '#{@user}'" if userentries.empty?
|
34
|
-
|
35
|
-
@entries = userentries
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
@@ -1,118 +0,0 @@
|
|
1
|
-
#!/usr/bin/ruby -w
|
2
|
-
# -*- ruby -*-
|
3
|
-
|
4
|
-
require 'svnx/log/entries'
|
5
|
-
require 'pvn/revision/error'
|
6
|
-
require 'logue/loggable'
|
7
|
-
|
8
|
-
module PVN; module Revision; end; end
|
9
|
-
|
10
|
-
# We represent what svn calls a revision (-r134:{2010-1-1}) as a Range,
|
11
|
-
# consisting of a from and to (optional) Argument.
|
12
|
-
module PVN::Revision
|
13
|
-
RELATIVE_REVISION_RE = Regexp.new '^([\+\-])(\d+)$'
|
14
|
-
|
15
|
-
# Returns the Nth revision from the given logging output.
|
16
|
-
|
17
|
-
# -n means to count from the end of the list.
|
18
|
-
# +n means to count from the beginning of the list.
|
19
|
-
# n means the literal revision number.
|
20
|
-
class Argument
|
21
|
-
include Logue::Loggable, Comparable
|
22
|
-
|
23
|
-
DATE_REGEXP = Regexp.new '^\{(.*?)\}'
|
24
|
-
SVN_ARGUMENT_WORDS = %w{ HEAD BASE COMMITTED PREV }
|
25
|
-
|
26
|
-
# these are also valid revisions
|
27
|
-
# :working_copy
|
28
|
-
# :head
|
29
|
-
|
30
|
-
attr_reader :value
|
31
|
-
attr_reader :log_entry
|
32
|
-
|
33
|
-
class << self
|
34
|
-
alias_method :orig_new, :new
|
35
|
-
|
36
|
-
def new value, xmllines = nil
|
37
|
-
# these are lines from "svn log -v <file>"
|
38
|
-
if xmllines.kind_of? Array
|
39
|
-
xmllines = xmllines.join ''
|
40
|
-
end
|
41
|
-
|
42
|
-
case value
|
43
|
-
when Fixnum
|
44
|
-
if value < 0
|
45
|
-
RelativeArgument.orig_new value, xmllines
|
46
|
-
else
|
47
|
-
FixnumArgument.orig_new value
|
48
|
-
end
|
49
|
-
when String
|
50
|
-
if SVN_ARGUMENT_WORDS.include? value
|
51
|
-
StringArgument.orig_new value
|
52
|
-
elsif md = RELATIVE_REVISION_RE.match(value)
|
53
|
-
RelativeArgument.orig_new md[0].to_i, xmllines
|
54
|
-
elsif DATE_REGEXP.match value
|
55
|
-
StringArgument.orig_new value
|
56
|
-
else
|
57
|
-
FixnumArgument.orig_new value.to_i
|
58
|
-
end
|
59
|
-
when Symbol
|
60
|
-
raise RevisionError.new "symbol not yet handled"
|
61
|
-
when Date
|
62
|
-
# $$$ this (and Time) will probably have to be converted to svn's format
|
63
|
-
raise RevisionError.new "date not yet handled"
|
64
|
-
when Time
|
65
|
-
raise RevisionError.new "time not yet handled"
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
def matches_relative? str
|
70
|
-
RELATIVE_REVISION_RE.match str
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
def initialize value
|
75
|
-
@value = value
|
76
|
-
end
|
77
|
-
|
78
|
-
def to_s
|
79
|
-
@value.to_s
|
80
|
-
end
|
81
|
-
|
82
|
-
def <=> other
|
83
|
-
@value <=> other.value
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
class FixnumArgument < Argument
|
88
|
-
end
|
89
|
-
|
90
|
-
class StringArgument < Argument
|
91
|
-
end
|
92
|
-
|
93
|
-
class WorkingCopyArgument < Argument
|
94
|
-
end
|
95
|
-
|
96
|
-
# this is of the form -3, which is revision[-3] (second one from the most
|
97
|
-
# recent; -1 is the most recent).
|
98
|
-
class RelativeArgument < FixnumArgument
|
99
|
-
def initialize value, xmllines
|
100
|
-
unless xmllines
|
101
|
-
raise RevisionError.new "cannot determine relative revision without xmllines"
|
102
|
-
end
|
103
|
-
|
104
|
-
logentries = SVNx::Log::Entries.new :xmllines => xmllines
|
105
|
-
nentries = logentries.size
|
106
|
-
|
107
|
-
# logentries are in descending order, so the most recent one is index 0
|
108
|
-
|
109
|
-
if value.abs > nentries
|
110
|
-
raise RevisionError.new "ERROR: no entry for revision: #{value.abs}; number of entries: #{nentries}"
|
111
|
-
else
|
112
|
-
idx = value < 0 ? -1 + value.abs : nentries - value
|
113
|
-
@log_entry = logentries[idx]
|
114
|
-
super @log_entry.revision.to_i
|
115
|
-
end
|
116
|
-
end
|
117
|
-
end
|
118
|
-
end
|
data/lib/pvn/revision/error.rb
DELETED
data/lib/pvn/revision/range.rb
DELETED
@@ -1,50 +0,0 @@
|
|
1
|
-
#!/usr/bin/ruby -w
|
2
|
-
# -*- ruby -*-
|
3
|
-
|
4
|
-
require 'svnx/log/entries'
|
5
|
-
require 'pvn/revision/argument'
|
6
|
-
require 'logue/loggable'
|
7
|
-
|
8
|
-
module PVN; module Revision; end; end
|
9
|
-
|
10
|
-
module PVN::Revision
|
11
|
-
# this is of the form: -r123:456
|
12
|
-
class Range
|
13
|
-
include Logue::Loggable
|
14
|
-
|
15
|
-
attr_reader :from
|
16
|
-
attr_reader :to
|
17
|
-
|
18
|
-
def initialize from, to = nil, xmllines = nil
|
19
|
-
if to
|
20
|
-
@from = to_revision from, xmllines
|
21
|
-
@to = to_revision to, xmllines
|
22
|
-
elsif from.kind_of? String
|
23
|
-
@from, @to = from.split(':').collect { |x| to_revision x, xmllines }
|
24
|
-
else
|
25
|
-
@from = to_revision from, xmllines
|
26
|
-
@to = :working_copy
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
def to_revision val, xmllines
|
31
|
-
val.kind_of?(Argument) || Argument.new(val, xmllines)
|
32
|
-
end
|
33
|
-
|
34
|
-
def to_s
|
35
|
-
str = @from.to_s
|
36
|
-
unless working_copy?
|
37
|
-
str << ':' << @to.to_s
|
38
|
-
end
|
39
|
-
str
|
40
|
-
end
|
41
|
-
|
42
|
-
def head?
|
43
|
-
@to == :head
|
44
|
-
end
|
45
|
-
|
46
|
-
def working_copy?
|
47
|
-
@to == nil || @to == :wc || @to == :working_copy
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
@@ -1,157 +0,0 @@
|
|
1
|
-
#!/usr/bin/ruby -w
|
2
|
-
# -*- ruby -*-
|
3
|
-
|
4
|
-
require 'tc'
|
5
|
-
require 'svnx/log/entries'
|
6
|
-
require 'pvn/revision/argument'
|
7
|
-
|
8
|
-
require 'resources'
|
9
|
-
|
10
|
-
module PVN::Revision
|
11
|
-
class ArgumentTestCase < PVN::TestCase
|
12
|
-
def setup
|
13
|
-
# This is the equivalent of "log" at revision 22, when this file was added
|
14
|
-
# at revision 13. Using this instead of just "log" when regenerating the
|
15
|
-
# resource files keeps the revisions from bouncing around.
|
16
|
-
@xmllines = Resources::PT_LOG_R22_13_SECONDFILE_TXT.readlines
|
17
|
-
end
|
18
|
-
|
19
|
-
def create_argument value
|
20
|
-
Argument.new value, @xmllines
|
21
|
-
end
|
22
|
-
|
23
|
-
def assert_argument_value exp_value, value
|
24
|
-
arg = create_argument value
|
25
|
-
assert_equal exp_value, arg.value
|
26
|
-
end
|
27
|
-
|
28
|
-
def assert_argument_value_raises value
|
29
|
-
assert_raises(PVN::Revision::RevisionError) do
|
30
|
-
assert_argument_value nil, value
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
def assert_argument_to_s exp_str, value
|
35
|
-
arg = create_argument value
|
36
|
-
assert_equal exp_str, arg.to_s
|
37
|
-
end
|
38
|
-
|
39
|
-
def assert_compare op, exp, xval, yval
|
40
|
-
x = create_argument xval
|
41
|
-
y = create_argument yval
|
42
|
-
msg = "xval: #{xval}; yval: #{yval}"
|
43
|
-
assert_equal exp, x.send(op, y), msg
|
44
|
-
end
|
45
|
-
|
46
|
-
def assert_argument_eq expeq, xval, yval
|
47
|
-
# it's the emoticon programming language
|
48
|
-
assert_compare :==, expeq, xval, yval
|
49
|
-
end
|
50
|
-
|
51
|
-
def assert_argument_gt expeq, xval, yval
|
52
|
-
assert_compare :>, expeq, xval, yval
|
53
|
-
end
|
54
|
-
|
55
|
-
def test_absolute_midrange
|
56
|
-
assert_argument_value 19, 19
|
57
|
-
end
|
58
|
-
|
59
|
-
def test_absolute_most_recent
|
60
|
-
assert_argument_value 22, 22
|
61
|
-
end
|
62
|
-
|
63
|
-
def test_absolute_least_recent
|
64
|
-
assert_argument_value 13, 13
|
65
|
-
end
|
66
|
-
|
67
|
-
def test_absolute_midrange_as_string
|
68
|
-
assert_argument_value 19, '19'
|
69
|
-
end
|
70
|
-
|
71
|
-
def test_absolute_most_recent_as_string
|
72
|
-
assert_argument_value 22, '22'
|
73
|
-
end
|
74
|
-
|
75
|
-
def test_absolute_least_recent_as_string
|
76
|
-
assert_argument_value 13, '13'
|
77
|
-
end
|
78
|
-
|
79
|
-
def test_svn_word
|
80
|
-
%w{ HEAD BASE COMMITTED PREV }.each do |word|
|
81
|
-
assert_argument_value word, word
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
def test_negative_most_recent
|
86
|
-
assert_argument_value 22, -1
|
87
|
-
end
|
88
|
-
|
89
|
-
def test_negative_second_most_recent
|
90
|
-
assert_argument_value 20, -2
|
91
|
-
end
|
92
|
-
|
93
|
-
def test_negative_least_recent
|
94
|
-
assert_argument_value 13, -5
|
95
|
-
end
|
96
|
-
|
97
|
-
def test_negative_too_far_back
|
98
|
-
assert_argument_value_raises(-6)
|
99
|
-
end
|
100
|
-
|
101
|
-
def test_negative_most_recent_as_string
|
102
|
-
assert_argument_value 22, '-1'
|
103
|
-
end
|
104
|
-
|
105
|
-
def test_negative_second_most_recent_as_string
|
106
|
-
assert_argument_value 20, '-2'
|
107
|
-
end
|
108
|
-
|
109
|
-
def test_negative_least_recent_as_string
|
110
|
-
assert_argument_value 13, '-5'
|
111
|
-
end
|
112
|
-
|
113
|
-
def test_negative_too_far_back_as_string
|
114
|
-
assert_argument_value_raises '-6'
|
115
|
-
end
|
116
|
-
|
117
|
-
def test_positive_most_recent
|
118
|
-
assert_argument_value 22, '+5'
|
119
|
-
end
|
120
|
-
|
121
|
-
def test_positive_second_most_recent
|
122
|
-
assert_argument_value 20, '+4'
|
123
|
-
end
|
124
|
-
|
125
|
-
def test_positive_least_recent
|
126
|
-
assert_argument_value 13, '+1'
|
127
|
-
end
|
128
|
-
|
129
|
-
def test_positive_too_far_forward
|
130
|
-
assert_argument_value_raises '+6'
|
131
|
-
end
|
132
|
-
|
133
|
-
def xxxtest_range_svn_word_to_number
|
134
|
-
assert_argument_value 'BASE:1', 'BASE:1'
|
135
|
-
end
|
136
|
-
|
137
|
-
def xxxtest_date
|
138
|
-
assert_argument_to_s '1967-12-10', '1967-12-10'
|
139
|
-
end
|
140
|
-
|
141
|
-
def test_to_s
|
142
|
-
assert_argument_to_s '5', '5'
|
143
|
-
assert_argument_to_s 'HEAD', 'HEAD'
|
144
|
-
end
|
145
|
-
|
146
|
-
def test_eq
|
147
|
-
assert_argument_eq true, '5', '5'
|
148
|
-
assert_argument_eq false, '4', '5'
|
149
|
-
assert_argument_eq false, '5', '4'
|
150
|
-
end
|
151
|
-
|
152
|
-
def test_gt
|
153
|
-
assert_argument_gt true, '17', '16'
|
154
|
-
assert_argument_gt false, '13', '14'
|
155
|
-
end
|
156
|
-
end
|
157
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
#!/usr/bin/ruby -w
|
2
|
-
# -*- ruby -*-
|
3
|
-
|
4
|
-
require 'tc'
|
5
|
-
require 'svnx/log/entries'
|
6
|
-
require 'pvn/revision/range'
|
7
|
-
|
8
|
-
require 'resources'
|
9
|
-
|
10
|
-
module PVN::Revision
|
11
|
-
class RangeTestCase < PVN::TestCase
|
12
|
-
def test_init
|
13
|
-
rr = Range.new '143:199'
|
14
|
-
assert_equal '143', rr.from.to_s
|
15
|
-
assert_equal '199', rr.to.to_s
|
16
|
-
assert_equal '143:199', rr.to_s
|
17
|
-
end
|
18
|
-
|
19
|
-
def test_to_working_copy
|
20
|
-
rr = Range.new '143'
|
21
|
-
assert_equal '143', rr.from.to_s
|
22
|
-
assert_nil rr.to
|
23
|
-
assert_equal '143', rr.to_s
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|