You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
365 lines
13 KiB
365 lines
13 KiB
Date: Tue, 20 Dec 2011 21:08:00 -0800 |
|
From: Vincent Batts <vbatts@slackware.com> |
|
Subject: Re: [PATCH] enabling ruby in the subversion build |
|
Message-ID: <20111221050800.GA17350@slackware.com> |
|
|
|
--- subversion-1.7.2/configure.ac.ruby19 |
|
+++ subversion-1.7.2/configure.ac |
|
@@ -1130,13 +1130,6 @@ if test "$RUBY" != "none"; then |
|
|
|
AC_SUBST(RUBY_MAJOR) |
|
AC_SUBST(RUBY_MINOR) |
|
- if test ! \( "$RUBY_MAJOR" -eq "1" -a "$RUBY_MINOR" -eq "8" \); then |
|
- # Disallow Ruby 1.9 or later until the binding tests get fixed |
|
- # to run with those versions. |
|
- RUBY="none" |
|
- AC_MSG_WARN([The detected Ruby is too new for Subversion to use]) |
|
- AC_MSG_WARN([Only 1.8.x releases are supported at this time]) |
|
- fi |
|
else |
|
AC_MSG_RESULT([no]) |
|
RUBY="none" |
|
--- subversion-1.7.2/Makefile.in.ruby19 |
|
+++ subversion-1.7.2/Makefile.in |
|
@@ -318,7 +318,7 @@ INSTALL_EXTRA_SWIG_RB=\ |
|
$(INSTALL_DATA) "$$i" $(DESTDIR)$(SWIG_RB_SITE_LIB_DIR)/svn; \ |
|
done |
|
|
|
-APXS = @APXS@ |
|
+APXS = @APXS@ |
|
|
|
PYTHON = @PYTHON@ |
|
PERL = @PERL@ |
|
@@ -818,9 +818,14 @@ swig-rb: autogen-swig-rb |
|
|
|
check-swig-rb: swig-rb svnserve |
|
cd $(SWIG_RB_DIR); \ |
|
- $(RUBY) -I $(SWIG_RB_SRC_DIR) \ |
|
- $(SWIG_RB_SRC_DIR)/test/run-test.rb \ |
|
- --verbose=$(SWIG_RB_TEST_VERBOSE) |
|
+ if [ "$(RUBY_MAJOR)" -eq 1 -a "$(RUBY_MINOR)" -lt 9 ] ; then \ |
|
+ $(RUBY) -I $(SWIG_RB_SRC_DIR) \ |
|
+ $(SWIG_RB_SRC_DIR)/test/run-test.rb \ |
|
+ --verbose=$(SWIG_RB_TEST_VERBOSE); \ |
|
+ else \ |
|
+ $(RUBY) -I $(SWIG_RB_SRC_DIR) \ |
|
+ $(SWIG_RB_SRC_DIR)/test/run-test.rb; \ |
|
+ fi |
|
|
|
EXTRACLEAN_SWIG_RB=rm -f $(SWIG_RB_SRC_DIR)/svn_*.c $(SWIG_RB_SRC_DIR)/core.c |
|
|
|
--- subversion-1.7.2/subversion/bindings/swig/ruby/svn/info.rb.ruby19 |
|
+++ subversion-1.7.2/subversion/bindings/swig/ruby/svn/info.rb |
|
@@ -229,7 +229,9 @@ module Svn |
|
|
|
def parse_diff_unified(entry) |
|
in_content = false |
|
- entry.body.each do |line| |
|
+ # accomodation for ruby 1.9 and 1.8 |
|
+ each_meth = entry.body.respond_to?(:each_line) ? :each_line : :each |
|
+ entry.body.send(each_meth) do |line| |
|
case line |
|
when /^@@/ |
|
in_content = true |
|
--- subversion-1.7.2/subversion/bindings/swig/ruby/svn/util.rb.ruby19 |
|
+++ subversion-1.7.2/subversion/bindings/swig/ruby/svn/util.rb |
|
@@ -36,7 +36,7 @@ module Svn |
|
module Util #:nodoc: |
|
module_function |
|
def to_ruby_class_name(name) |
|
- name.split("_").collect do |x| |
|
+ name.to_s.split("_").collect do |x| |
|
"#{x[0,1].upcase}#{x[1..-1].downcase}" |
|
end.join("") |
|
end |
|
--- subversion-1.7.2/subversion/bindings/swig/ruby/test/my-assertions.rb.ruby19 |
|
+++ subversion-1.7.2/subversion/bindings/swig/ruby/test/my-assertions.rb |
|
@@ -24,20 +24,33 @@ module Test |
|
module Unit |
|
module Assertions |
|
|
|
+ # make an intermediary assertion block handler |
|
+ def _my_assert_block(&block) |
|
+ if RUBY_VERSION > '1.9' |
|
+ assert_block do |
|
+ yield |
|
+ end |
|
+ else |
|
+ _wrap_assertion do |
|
+ yield |
|
+ end |
|
+ end |
|
+ end |
|
+ |
|
def assert_true(boolean, message=nil) |
|
- _wrap_assertion do |
|
+ _my_assert_block do |
|
assert_equal(true, boolean, message) |
|
end |
|
end |
|
|
|
def assert_false(boolean, message=nil) |
|
- _wrap_assertion do |
|
+ _my_assert_block do |
|
assert_equal(false, boolean, message) |
|
end |
|
end |
|
|
|
def assert_nested_sorted_array(expected, actual, message=nil) |
|
- _wrap_assertion do |
|
+ _my_assert_block do |
|
assert_equal(expected.collect {|elem| elem.sort}, |
|
actual.collect {|elem| elem.sort}, |
|
message) |
|
@@ -45,7 +58,7 @@ module Test |
|
end |
|
|
|
def assert_equal_log_entries(expected, actual, message=nil) |
|
- _wrap_assertion do |
|
+ _my_assert_block do |
|
actual = actual.collect do |entry| |
|
changed_paths = entry.changed_paths |
|
changed_paths.each_key do |path| |
|
--- subversion-1.7.2/subversion/bindings/swig/ruby/test/test_client.rb.ruby19 |
|
+++ subversion-1.7.2/subversion/bindings/swig/ruby/test/test_client.rb |
|
@@ -2203,7 +2203,11 @@ class SvnClientTest < Test::Unit::TestCa |
|
|
|
make_context(log) do |ctx| |
|
items = nil |
|
- ctx.set_log_msg_func do |items| |
|
+ ctx.set_log_msg_func do |l_items| |
|
+ # ruby 1.8 magically carried the assignment of 'items' back from this Proc block, |
|
+ # but in 1.9, we need to have names that don't conflict, and set the outside 'items'. |
|
+ # This works in 1.8 as well |
|
+ items = l_items |
|
[true, log] |
|
end |
|
|
|
--- subversion-1.7.2/subversion/bindings/swig/ruby/test/test_core.rb.ruby19 |
|
+++ subversion-1.7.2/subversion/bindings/swig/ruby/test/test_core.rb |
|
@@ -1,3 +1,4 @@ |
|
+# encoding: UTF-8 |
|
# ==================================================================== |
|
# Licensed to the Apache Software Foundation (ASF) under one |
|
# or more contributor license agreements. See the NOTICE file |
|
@@ -52,7 +53,13 @@ class SvnCoreTest < Test::Unit::TestCase |
|
now = Time.now.gmtime |
|
str = now.strftime("%Y-%m-%dT%H:%M:%S.") + "#{now.usec}Z" |
|
|
|
- assert_equal(now, Time.from_svn_format(str)) |
|
+ if RUBY_VERSION > '1.9' |
|
+ # ruby 1.9 Time comparison gets into the nano-seconds, that strftime |
|
+ # shaves off. So we can compare epoch time instead |
|
+ assert_equal(now.to_i, Time.from_svn_format(str).gmtime.to_i) |
|
+ else |
|
+ assert_equal(now, Time.from_svn_format(str).gmtime) |
|
+ end |
|
|
|
apr_time = now.to_i * 1000000 + now.usec |
|
assert_equal(apr_time, now.to_apr_time) |
|
@@ -244,7 +251,11 @@ class SvnCoreTest < Test::Unit::TestCase |
|
config_infos << [section, name, value] |
|
end |
|
assert_equal(infos.sort, config_infos.sort) |
|
- assert_equal(infos.sort, config.collect {|args| args}.sort) |
|
+ if RUBY_VERSION > '1.9' |
|
+ assert_equal(infos.sort, config.collect {|sect,name,val| [sect,name,val]}.sort) |
|
+ else |
|
+ assert_equal(infos.sort, config.collect {|args| args}.sort) |
|
+ end |
|
end |
|
|
|
def test_config_find_group |
|
@@ -532,7 +543,13 @@ EOD |
|
date_str = now.strftime("%Y-%m-%dT%H:%M:%S") |
|
date_str << ".#{now.usec}Z" |
|
info.date = date_str |
|
- assert_equal(now, info.date) |
|
+ if RUBY_VERSION > '1.9' |
|
+ # ruby 1.9 Time comparison gets into the nano-seconds, that strftime |
|
+ # shaves off. So we can compare epoch time instead |
|
+ assert_equal(now.to_i, info.date.gmtime.to_i) |
|
+ else |
|
+ assert_equal(now, info.date.gmtime) |
|
+ end |
|
end |
|
|
|
def test_svn_prop |
|
--- subversion-1.7.2/subversion/bindings/swig/ruby/test/test_delta.rb.ruby19 |
|
+++ subversion-1.7.2/subversion/bindings/swig/ruby/test/test_delta.rb |
|
@@ -17,9 +17,10 @@ |
|
# under the License. |
|
# ==================================================================== |
|
|
|
+require "my-assertions" |
|
require "util" |
|
require "stringio" |
|
-require 'md5' |
|
+require 'digest/md5' |
|
require 'tempfile' |
|
|
|
require "svn/info" |
|
@@ -46,8 +47,8 @@ class SvnDeltaTest < Test::Unit::TestCas |
|
target = StringIO.new(t) |
|
stream = Svn::Delta::TextDeltaStream.new(source, target) |
|
assert_nil(stream.md5_digest) |
|
- _wrap_assertion do |
|
- stream.each do |window| |
|
+ _my_assert_block do |
|
+ ret = stream.each do |window| |
|
window.ops.each do |op| |
|
op_size = op.offset + op.length |
|
case op.action_code |
|
@@ -62,8 +63,9 @@ class SvnDeltaTest < Test::Unit::TestCas |
|
end |
|
end |
|
end |
|
+ true if RUBY_VERSION > '1.9' # this block returns nil in > ruby '1.9' |
|
end |
|
- assert_equal(MD5.new(t).hexdigest, stream.md5_digest) |
|
+ assert_equal(Digest::MD5.hexdigest(t), stream.md5_digest) |
|
end |
|
|
|
def test_txdelta_window_compose |
|
@@ -81,7 +83,7 @@ class SvnDeltaTest < Test::Unit::TestCas |
|
end |
|
end |
|
|
|
- _wrap_assertion do |
|
+ assert_block do |
|
composed_window.ops.each do |op| |
|
op_size = op.offset + op.length |
|
case op.action_code |
|
@@ -169,6 +171,7 @@ |
|
stream = Svn::Delta::TextDeltaStream.new(source, target) |
|
|
|
output = StringIO.new("") |
|
+ output.set_encoding Encoding::ASCII_8BIT if output.respond_to? :set_encoding |
|
handler = Svn::Delta.svndiff_handler(output) |
|
|
|
Svn::Delta.send(target_text, handler) |
|
--- subversion-1.7.2/subversion/bindings/swig/ruby/test/test_fs.rb.ruby19 |
|
+++ subversion-1.7.2/subversion/bindings/swig/ruby/test/test_fs.rb |
|
@@ -20,7 +20,7 @@ |
|
require "my-assertions" |
|
require "util" |
|
require "time" |
|
-require "md5" |
|
+require "digest/md5" |
|
|
|
require "svn/core" |
|
require "svn/fs" |
|
@@ -49,14 +49,15 @@ class SvnFsTest < Test::Unit::TestCase |
|
|
|
assert(!File.exist?(path)) |
|
fs = nil |
|
- callback = Proc.new do |fs| |
|
+ callback = Proc.new do |t_fs| |
|
assert(File.exist?(path)) |
|
assert_equal(fs_type, Svn::Fs.type(path)) |
|
- fs.set_warning_func do |err| |
|
+ t_fs.set_warning_func do |err| |
|
p err |
|
abort |
|
end |
|
- assert_equal(path, fs.path) |
|
+ assert_equal(path, t_fs.path) |
|
+ fs = t_fs |
|
end |
|
yield(:create, [path, config], callback) |
|
|
|
@@ -162,7 +163,7 @@ class SvnFsTest < Test::Unit::TestCase |
|
|
|
assert_equal(src, @fs.root.file_contents(path_in_repos){|f| f.read}) |
|
assert_equal(src.length, @fs.root.file_length(path_in_repos)) |
|
- assert_equal(MD5.new(src).hexdigest, |
|
+ assert_equal(Digest::MD5.hexdigest(src), |
|
@fs.root.file_md5_checksum(path_in_repos)) |
|
|
|
assert_equal([path_in_repos], @fs.root.paths_changed.keys) |
|
@@ -364,7 +365,7 @@ class SvnFsTest < Test::Unit::TestCase |
|
|
|
File.open(path, "w") {|f| f.print(modified)} |
|
@fs.transaction do |txn| |
|
- checksum = MD5.new(normalize_line_break(result)).hexdigest |
|
+ checksum = Digest::MD5.hexdigest(normalize_line_break(result)) |
|
stream = txn.root.apply_text(path_in_repos, checksum) |
|
stream.write(normalize_line_break(result)) |
|
stream.close |
|
@@ -392,8 +393,8 @@ class SvnFsTest < Test::Unit::TestCase |
|
|
|
File.open(path, "w") {|f| f.print(modified)} |
|
@fs.transaction do |txn| |
|
- base_checksum = MD5.new(normalize_line_break(src)).hexdigest |
|
- checksum = MD5.new(normalize_line_break(result)).hexdigest |
|
+ base_checksum = Digest::MD5.hexdigest(normalize_line_break(src)) |
|
+ checksum = Digest::MD5.hexdigest(normalize_line_break(result)) |
|
handler = txn.root.apply_textdelta(path_in_repos, |
|
base_checksum, checksum) |
|
assert_raises(Svn::Error::ChecksumMismatch) do |
|
--- subversion-1.7.2/subversion/bindings/swig/ruby/test/test_repos.rb.ruby19 |
|
+++ subversion-1.7.2/subversion/bindings/swig/ruby/test/test_repos.rb |
|
@@ -98,11 +98,12 @@ class SvnReposTest < Test::Unit::TestCas |
|
fs_type = Svn::Fs::TYPE_FSFS |
|
fs_config = {Svn::Fs::CONFIG_FS_TYPE => fs_type} |
|
repos = nil |
|
- Svn::Repos.create(tmp_repos_path, {}, fs_config) do |repos| |
|
+ Svn::Repos.create(tmp_repos_path, {}, fs_config) do |t_repos| |
|
assert(File.exist?(tmp_repos_path)) |
|
- fs_type_path = File.join(repos.fs.path, Svn::Fs::CONFIG_FS_TYPE) |
|
+ fs_type_path = File.join(t_repos.fs.path, Svn::Fs::CONFIG_FS_TYPE) |
|
assert_equal(fs_type, File.open(fs_type_path) {|f| f.read.chop}) |
|
- repos.fs.set_warning_func(&warning_func) |
|
+ t_repos.fs.set_warning_func(&warning_func) |
|
+ repos = t_repos |
|
end |
|
|
|
assert(repos.closed?) |
|
--- subversion-1.7.2/subversion/bindings/swig/ruby/test/test-unit-ext/priority.rb.ruby19 |
|
+++ subversion-1.7.2/subversion/bindings/swig/ruby/test/test-unit-ext/priority.rb |
|
@@ -179,7 +179,7 @@ module Test |
|
apply_priority |
|
!@tests.empty? |
|
end |
|
- end |
|
+ end if RUBY_VERSION < '1.9.3' |
|
|
|
class AutoRunner |
|
alias_method :original_options, :options |
|
--- subversion-1.7.2/subversion/bindings/swig/ruby/test/test-unit-ext.rb.ruby19 |
|
+++ subversion-1.7.2/subversion/bindings/swig/ruby/test/test-unit-ext.rb |
|
@@ -17,7 +17,7 @@ |
|
# under the License. |
|
# ==================================================================== |
|
|
|
-require "test-unit-ext/always-show-result" |
|
+require "test-unit-ext/always-show-result" if RUBY_VERSION < '1.9.3' |
|
require "test-unit-ext/priority" |
|
-require "test-unit-ext/backtrace-filter" |
|
-require "test-unit-ext/long-display-for-emacs" |
|
+require "test-unit-ext/backtrace-filter" if RUBY_VERSION < '1.9.3' |
|
+require "test-unit-ext/long-display-for-emacs" if RUBY_VERSION < '1.9.3' |
|
--- subversion-1.7.2/subversion/bindings/swig/ruby/test/test_wc.rb.ruby19 |
|
+++ subversion-1.7.2/subversion/bindings/swig/ruby/test/test_wc.rb |
|
@@ -530,7 +530,7 @@ EOE |
|
ctx.ci(lf_path) |
|
|
|
Svn::Wc::AdmAccess.open(nil, @wc_path, true, 5) do |access| |
|
- _wrap_assertion do |
|
+ _my_assert_block do |
|
File.open(src_path, "wb") {|f| f.print(source)} |
|
args = [method_name, src_path, crlf_path, Svn::Wc::TRANSLATE_FROM_NF] |
|
result = yield(access.send(*args), source) |
|
@@ -1084,7 +1084,11 @@ EOE |
|
assert_not_nil context |
|
assert_kind_of Svn::Wc::Context, context |
|
end |
|
- assert_nil result; |
|
+ if RUBY_VERSION > '1.9' |
|
+ assert_equal(result,true) |
|
+ else |
|
+ assert_nil result |
|
+ end |
|
end |
|
end |
|
|
|
|