Brute force fix for Change#path #from_path on Ruby 1.9.2
Some database adapters are returning strings unencoded correctly (sqlite3-ruby)
This commit is contained in:
parent
d2724ef89c
commit
bbb4f63ae4
|
@ -17,10 +17,22 @@ class Change < ActiveRecord::Base
|
||||||
validates_presence_of :changeset_id, :action, :path
|
validates_presence_of :changeset_id, :action, :path
|
||||||
before_save :init_path
|
before_save :init_path
|
||||||
|
|
||||||
|
delegate :repository_encoding, :to => :changeset, :allow_nil => true, :prefix => true
|
||||||
|
|
||||||
def relative_path
|
def relative_path
|
||||||
changeset.repository.relative_path(path)
|
changeset.repository.relative_path(path)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def path
|
||||||
|
# TODO: shouldn't access Changeset#to_utf8 directly
|
||||||
|
self.path = Changeset.to_utf8(read_attribute(:path), changeset_repository_encoding)
|
||||||
|
end
|
||||||
|
|
||||||
|
def from_path
|
||||||
|
# TODO: shouldn't access Changeset#to_utf8 directly
|
||||||
|
self.path = Changeset.to_utf8(read_attribute(:from_path), changeset_repository_encoding)
|
||||||
|
end
|
||||||
|
|
||||||
def init_path
|
def init_path
|
||||||
self.path ||= ""
|
self.path ||= ""
|
||||||
end
|
end
|
||||||
|
|
|
@ -74,6 +74,15 @@ class Changeset < ActiveRecord::Base
|
||||||
user || committer.to_s.split('<').first
|
user || committer.to_s.split('<').first
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Delegate to a Repository's log encoding
|
||||||
|
def repository_encoding
|
||||||
|
if repository.present?
|
||||||
|
repository.repo_log_encoding
|
||||||
|
else
|
||||||
|
nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
# Committer of the Changeset
|
# Committer of the Changeset
|
||||||
#
|
#
|
||||||
# Attribute reader for committer that encodes the committer string to
|
# Attribute reader for committer that encodes the committer string to
|
||||||
|
@ -247,6 +256,7 @@ class Changeset < ActiveRecord::Base
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
# TODO: refactor to a standard helper method
|
||||||
def self.to_utf8(str, encoding)
|
def self.to_utf8(str, encoding)
|
||||||
return str if str.nil?
|
return str if str.nil?
|
||||||
str.force_encoding("ASCII-8BIT") if str.respond_to?(:force_encoding)
|
str.force_encoding("ASCII-8BIT") if str.respond_to?(:force_encoding)
|
||||||
|
|
Loading…
Reference in New Issue