aboutsummaryrefslogtreecommitdiff
path: root/log.rb
diff options
context:
space:
mode:
authorBenjamin Kellermann <Benjamin.Kellermann@gmx.de>2009-11-23 19:50:36 +0100
committerBenjamin Kellermann <Benjamin.Kellermann@gmx.de>2009-11-23 19:50:36 +0100
commit2fc1758c7be01cd3683457164c76cf7acd9df827 (patch)
tree8f80ad38744006dfb007ba41754520478e2932ca /log.rb
parent73cb84647e97679cbd69a3ea87d49f72b950c3df (diff)
show everytime 10 history entries
Diffstat (limited to 'log.rb')
-rw-r--r--log.rb54
1 files changed, 36 insertions, 18 deletions
diff --git a/log.rb b/log.rb
index dd817ef..afcf6c4 100644
--- a/log.rb
+++ b/log.rb
@@ -57,22 +57,33 @@ class Log
}
ret
end
+ def revisions
+ @log.collect{|e| e.rev }
+ end
def [](revision)
- if revision.class == Fixnum
- @log.each{|l|
- return l if l.rev == revision
- }
- raise "No such revision found #{revision}"
- else
- min_r, max_r = "",""
- @log.each_with_index{|l,i|
- min_r = i if l.rev == revision.min
- max_r = i if l.rev == revision.max
- }
- min_r = @log.index(min) if min_r == ""
- max_r = @log.index(max) if max_r == ""
- return Log.new(@log[min_r..max_r])
+ i = revisions.index(revision)
+ if i
+ return @log[i]
+ else # no revision found, search the nearest
+ dist = revisions.collect{|e| (e - revision).abs }.sort[0]
+ i = revisions.index(revision + dist) || revisions.index(revision - dist)
+ return @log[i]
+ end
+ end
+ def around_rev(rev,number)
+ ret = [self[rev]]
+ midindex = @log.index(ret[0])
+ counter = 1
+ while ret.size < number && counter < @log.size
+ ret << @log[midindex + counter]
+ counter *= -1 if counter <= midindex
+ if counter > 0
+ counter += 1
+ end
+ ret.compact!
end
+ ret.sort!{|a,b| a.rev <=> b.rev}
+ Log.new(ret)
end
def add(revision,timestamp,comment)
@log << LogEntry.new(revision,timestamp,comment)
@@ -135,10 +146,17 @@ require "test/unit"
assert_equal(19,l.max.rev)
assert_equal("baz 10",l[10].comment)
- p = l[9..11]
- assert_equal([9,10,11],[p[9].rev,p[10].rev,p[11].rev])
-
- assert_equal([10],l.comment_matches(/^baz \d*$/).collect{|e| e.rev})
+ assert_equal([10],l.comment_matches(/^baz \d*$/).revisions)
+
+ [42,23].each{|i|
+ l.add(i,Time.now,"foo #{i}")
+ }
+ assert_equal(l[42],l[37])
+
+ assert_equal([16,17,18,19,23,42],l.around_rev(23,6).revisions)
+ assert_equal([0,1,2,3,4,5,6,7,8,9,10,11],l.around_rev(2,12).revisions)
+ assert_equal(l.revisions,l.around_rev(0,99).revisions)
+
end
end
end