プロジェクト

全般

プロフィール

Vote #66866

完了

mercurial_adapter should ensure the right LANG environment variable

Admin Redmine さんが3年以上前に追加. 3年以上前に更新.

ステータス:
Closed
優先度:
通常
担当者:
-
カテゴリ:
SCM_3
対象バージョン:
開始日:
2010/03/18
期日:
進捗率:

100%

予定工数:
category_id:
3
version_id:
26
issue_org_id:
5117
author_id:
12450
assigned_to_id:
0
comments:
21
status_id:
5
tracker_id:
3
plus1:
0
affected_version:
closed_on:
affected_version_id:
ステータス-->[Closed]

説明

http://www.redmine.org/projects/redmine/repository/revisions/3506/entry/trunk/lib/redmine/scm/adapters/mercurial_adapter.rb#L47 matches with a regular expression which may not work on some locales.

$ locale | grep LANG
LANG="it_IT.UTF-8"
$ hg --version
Mercurial SCM Distribuito (versione 1.5+20100307)

To ensure the correct behaviour you may set @LANG='C'@ before calling hg.

rake test error snippets

  2) Error:
test_annotate(RepositoriesMercurialControllerTest):
NoMethodError: You have a nil object when you didn't expect it!
You might have expected an instance of ActiveRecord::Base.
The error occurred while evaluating nil.[]
    lib/redmine/scm/adapters/mercurial_adapter.rb:47:in `hgversion_from_command_line'
    lib/redmine/scm/adapters/mercurial_adapter.rb:40:in `hgversion'
    lib/redmine/scm/adapters/mercurial_adapter.rb:33:in `client_version'
    lib/redmine/scm/adapters/mercurial_adapter.rb:51:in `template_path'
    lib/redmine/scm/adapters/mercurial_adapter.rb:108:in `revisions'
    lib/redmine/scm/adapters/mercurial_adapter.rb:72:in `info'
    lib/redmine/scm/adapters/abstract_adapter.rb:162:in `retrieve_root_url'
    lib/redmine/scm/adapters/abstract_adapter.rb:54:in `initialize'
    app/models/repository.rb:41:in `new'
    app/models/repository.rb:41:in `scm'
    app/models/repository.rb:75:in `default_branch'
    app/controllers/repositories_controller.rb:205:in `find_repository'
    /test/functional/repositories_mercurial_controller_test.rb:125:in `test_annotate'

  3) Error:
test_changes(RepositoriesMercurialControllerTest):
NoMethodError: You have a nil object when you didn't expect it!
You might have expected an instance of ActiveRecord::Base.
The error occurred while evaluating nil.[]
    lib/redmine/scm/adapters/mercurial_adapter.rb:47:in `hgversion_from_command_line'
    lib/redmine/scm/adapters/mercurial_adapter.rb:40:in `hgversion'
    lib/redmine/scm/adapters/mercurial_adapter.rb:33:in `client_version'
    lib/redmine/scm/adapters/mercurial_adapter.rb:51:in `template_path'
    lib/redmine/scm/adapters/mercurial_adapter.rb:108:in `revisions'
    lib/redmine/scm/adapters/mercurial_adapter.rb:72:in `info'
    lib/redmine/scm/adapters/abstract_adapter.rb:162:in `retrieve_root_url'
    lib/redmine/scm/adapters/abstract_adapter.rb:54:in `initialize'
    app/models/repository.rb:41:in `new'
    app/models/repository.rb:41:in `scm'
    app/models/repository.rb:75:in `default_branch'
    app/controllers/repositories_controller.rb:205:in `find_repository'
    /test/functional/repositories_mercurial_controller_test.rb:79:in `test_changes'

  4) Error:
test_diff(RepositoriesMercurialControllerTest):
NoMethodError: You have a nil object when you didn't expect it!
You might have expected an instance of ActiveRecord::Base.
The error occurred while evaluating nil.[]
    lib/redmine/scm/adapters/mercurial_adapter.rb:47:in `hgversion_from_command_line'
    lib/redmine/scm/adapters/mercurial_adapter.rb:40:in `hgversion'
    lib/redmine/scm/adapters/mercurial_adapter.rb:33:in `client_version'
    lib/redmine/scm/adapters/mercurial_adapter.rb:51:in `template_path'
    lib/redmine/scm/adapters/mercurial_adapter.rb:108:in `revisions'
    lib/redmine/scm/adapters/mercurial_adapter.rb:72:in `info'
    lib/redmine/scm/adapters/abstract_adapter.rb:162:in `retrieve_root_url'
    lib/redmine/scm/adapters/abstract_adapter.rb:54:in `initialize'
    app/models/repository.rb:41:in `new'
    app/models/repository.rb:41:in `scm'
    app/models/repository.rb:87:in `diff'
    app/controllers/repositories_controller.rb:167:in `diff'
    /test/functional/repositories_mercurial_controller_test.rb:113:in `test_diff'

  5) Error:
test_directory_entry(RepositoriesMercurialControllerTest):
NoMethodError: You have a nil object when you didn't expect it!
You might have expected an instance of ActiveRecord::Base.
The error occurred while evaluating nil.[]
    lib/redmine/scm/adapters/mercurial_adapter.rb:47:in `hgversion_from_command_line'
    lib/redmine/scm/adapters/mercurial_adapter.rb:40:in `hgversion'
    lib/redmine/scm/adapters/mercurial_adapter.rb:33:in `client_version'
    lib/redmine/scm/adapters/mercurial_adapter.rb:51:in `template_path'
    lib/redmine/scm/adapters/mercurial_adapter.rb:108:in `revisions'
    lib/redmine/scm/adapters/mercurial_adapter.rb:72:in `info'
    lib/redmine/scm/adapters/abstract_adapter.rb:162:in `retrieve_root_url'
    lib/redmine/scm/adapters/abstract_adapter.rb:54:in `initialize'
    app/models/repository.rb:41:in `new'
    app/models/repository.rb:41:in `scm'
    app/models/repository.rb:75:in `default_branch'
    app/controllers/repositories_controller.rb:205:in `find_repository'
    /test/functional/repositories_mercurial_controller_test.rb:104:in `test_directory_entry'

  6) Error:
test_entry_download(RepositoriesMercurialControllerTest):
NoMethodError: You have a nil object when you didn't expect it!
You might have expected an instance of ActiveRecord::Base.
The error occurred while evaluating nil.[]
    lib/redmine/scm/adapters/mercurial_adapter.rb:47:in `hgversion_from_command_line'
    lib/redmine/scm/adapters/mercurial_adapter.rb:40:in `hgversion'
    lib/redmine/scm/adapters/mercurial_adapter.rb:33:in `client_version'
    lib/redmine/scm/adapters/mercurial_adapter.rb:51:in `template_path'
    lib/redmine/scm/adapters/mercurial_adapter.rb:108:in `revisions'
    lib/redmine/scm/adapters/mercurial_adapter.rb:72:in `info'
    lib/redmine/scm/adapters/abstract_adapter.rb:162:in `retrieve_root_url'
    lib/redmine/scm/adapters/abstract_adapter.rb:54:in `initialize'
    app/models/repository.rb:41:in `new'
    app/models/repository.rb:41:in `scm'
    app/models/repository.rb:75:in `default_branch'
    app/controllers/repositories_controller.rb:205:in `find_repository'
    /test/functional/repositories_mercurial_controller_test.rb:97:in `test_entry_download'

  7) Error:
test_entry_show(RepositoriesMercurialControllerTest):
NoMethodError: You have a nil object when you didn't expect it!
You might have expected an instance of ActiveRecord::Base.
The error occurred while evaluating nil.[]
    lib/redmine/scm/adapters/mercurial_adapter.rb:47:in `hgversion_from_command_line'
    lib/redmine/scm/adapters/mercurial_adapter.rb:40:in `hgversion'
    lib/redmine/scm/adapters/mercurial_adapter.rb:33:in `client_version'
    lib/redmine/scm/adapters/mercurial_adapter.rb:51:in `template_path'
    lib/redmine/scm/adapters/mercurial_adapter.rb:108:in `revisions'
    lib/redmine/scm/adapters/mercurial_adapter.rb:72:in `info'
    lib/redmine/scm/adapters/abstract_adapter.rb:162:in `retrieve_root_url'
    lib/redmine/scm/adapters/abstract_adapter.rb:54:in `initialize'
    app/models/repository.rb:41:in `new'
    app/models/repository.rb:41:in `scm'
    app/models/repository.rb:75:in `default_branch'
    app/controllers/repositories_controller.rb:205:in `find_repository'
    /test/functional/repositories_mercurial_controller_test.rb:86:in `test_entry_show'

  8) Error:
test_show(RepositoriesMercurialControllerTest):
NoMethodError: You have a nil object when you didn't expect it!
You might have expected an instance of ActiveRecord::Base.
The error occurred while evaluating nil.[]
    lib/redmine/scm/adapters/mercurial_adapter.rb:47:in `hgversion_from_command_line'
    lib/redmine/scm/adapters/mercurial_adapter.rb:40:in `hgversion'
    lib/redmine/scm/adapters/mercurial_adapter.rb:33:in `client_version'
    lib/redmine/scm/adapters/mercurial_adapter.rb:51:in `template_path'
    lib/redmine/scm/adapters/mercurial_adapter.rb:108:in `revisions'
    lib/redmine/scm/adapters/mercurial_adapter.rb:72:in `info'
    lib/redmine/scm/adapters/abstract_adapter.rb:162:in `retrieve_root_url'
    lib/redmine/scm/adapters/abstract_adapter.rb:54:in `initialize'
    app/models/repository.rb:41:in `new'
    app/models/repository.rb:41:in `scm'
    app/models/repository.rb:75:in `default_branch'
    app/controllers/repositories_controller.rb:205:in `find_repository'
    /test/functional/repositories_mercurial_controller_test.rb:40:in `test_show'

  9) Error:
test_show_at_given_revision(RepositoriesMercurialControllerTest):
NoMethodError: You have a nil object when you didn't expect it!
You might have expected an instance of ActiveRecord::Base.
The error occurred while evaluating nil.[]
    lib/redmine/scm/adapters/mercurial_adapter.rb:47:in `hgversion_from_command_line'
    lib/redmine/scm/adapters/mercurial_adapter.rb:40:in `hgversion'
    lib/redmine/scm/adapters/mercurial_adapter.rb:33:in `client_version'
    lib/redmine/scm/adapters/mercurial_adapter.rb:51:in `template_path'
    lib/redmine/scm/adapters/mercurial_adapter.rb:108:in `revisions'
    lib/redmine/scm/adapters/mercurial_adapter.rb:72:in `info'
    lib/redmine/scm/adapters/abstract_adapter.rb:162:in `retrieve_root_url'
    lib/redmine/scm/adapters/abstract_adapter.rb:54:in `initialize'
    app/models/repository.rb:41:in `new'
    app/models/repository.rb:41:in `scm'
    app/models/repository/mercurial.rb:33:in `entries'
    app/controllers/repositories_controller.rb:72:in `show'
    /test/functional/repositories_mercurial_controller_test.rb:71:in `test_show_at_given_revision'

 10) Error:
test_show_directory(RepositoriesMercurialControllerTest):
NoMethodError: You have a nil object when you didn't expect it!
You might have expected an instance of ActiveRecord::Base.
The error occurred while evaluating nil.[]
    lib/redmine/scm/adapters/mercurial_adapter.rb:47:in `hgversion_from_command_line'
    lib/redmine/scm/adapters/mercurial_adapter.rb:40:in `hgversion'
    lib/redmine/scm/adapters/mercurial_adapter.rb:33:in `client_version'
    lib/redmine/scm/adapters/mercurial_adapter.rb:51:in `template_path'
    lib/redmine/scm/adapters/mercurial_adapter.rb:108:in `revisions'
    lib/redmine/scm/adapters/mercurial_adapter.rb:72:in `info'
    lib/redmine/scm/adapters/abstract_adapter.rb:162:in `retrieve_root_url'
    lib/redmine/scm/adapters/abstract_adapter.rb:54:in `initialize'
    app/models/repository.rb:41:in `new'
    app/models/repository.rb:41:in `scm'
    app/models/repository.rb:75:in `default_branch'
    app/controllers/repositories_controller.rb:205:in `find_repository'
    /test/functional/repositories_mercurial_controller_test.rb:59:in `test_show_directory'

 11) Error:
test_show_root(RepositoriesMercurialControllerTest):
NoMethodError: You have a nil object when you didn't expect it!
You might have expected an instance of ActiveRecord::Base.
The error occurred while evaluating nil.[]
    lib/redmine/scm/adapters/mercurial_adapter.rb:47:in `hgversion_from_command_line'
    lib/redmine/scm/adapters/mercurial_adapter.rb:40:in `hgversion'
    lib/redmine/scm/adapters/mercurial_adapter.rb:33:in `client_version'
    lib/redmine/scm/adapters/mercurial_adapter.rb:51:in `template_path'
    lib/redmine/scm/adapters/mercurial_adapter.rb:108:in `revisions'
    lib/redmine/scm/adapters/mercurial_adapter.rb:72:in `info'
    lib/redmine/scm/adapters/abstract_adapter.rb:162:in `retrieve_root_url'
    lib/redmine/scm/adapters/abstract_adapter.rb:54:in `initialize'
    app/models/repository.rb:41:in `new'
    app/models/repository.rb:41:in `scm'
    app/models/repository.rb:75:in `default_branch'
    app/controllers/repositories_controller.rb:205:in `find_repository'
    /test/functional/repositories_mercurial_controller_test.rb:48:in `test_show_root'

This patch applies on redmine 0.9.3

$ script/about
About your application's environment
Ruby version              1.8.7 (universal-darwin10.0)
RubyGems version          1.3.6
Rack version              1.0
Rails version             2.3.5
Active Record version     2.3.5
Active Resource version   2.3.5
Action Mailer version     2.3.5
Active Support version    2.3.5
Application root          /Users/nolith/Documents/Projects/redmine-hg
Environment               development
Database adapter          sqlite3
Database schema version   20100222000000

journals

This patch does not work on windows.
--------------------------------------------------------------------------------
<pre>
$ hg diff
diff -r 8152d1bdeac5 lib/redmine/scm/adapters/mercurial_adapter.rb
--- a/lib/redmine/scm/adapters/mercurial_adapter.rb Sun Feb 28 22:12:54 2010 +0900
+++ b/lib/redmine/scm/adapters/mercurial_adapter.rb Thu Mar 18 23:30:34 2010 +0900
@@ -23,7 +23,8 @@
class MercurialAdapter < AbstractAdapter

# Mercurial executable name
- HG_BIN = "hg"
+ # HG_BIN = "hg"
+ HG_BIN = "env LANG=C hg"
TEMPLATES_DIR = File.dirname(__FILE__) + "/mercurial"
TEMPLATE_NAME = "hg-template"
TEMPLATE_EXTENSION = "tmpl"
</pre>

<pre>
$ env LANG=ja_JP.UTF-8 hg --version
Mercurial - 分散構成管理ツール(バージョン 1.5+99-bedef1c228d3)
</pre>

--------------------------------------------------------------------------------
MSysGit has env.exe in "C:\Program Files\Git\bin".
But TortoiseHg does not have env.exe in "C:\Program Files\TortoiseHg".
This is not solution.

--------------------------------------------------------------------------------
Toshi Maruyama wrote:
> MSysGit has env.exe in "C:Program FilesGitin".
> But TortoiseHg does not have env.exe in "C:Program FilesTortoiseHg".
> This is not solution.

Does it install python?
<pre>
# HG changeset patch
# Parent 0dc60afda5722afecf6f7fc5c13552d3f008bdf2
sets LANG variable before calling hg

diff --git a/lib/redmine/scm/adapters/mercurial_adapter.rb b/lib/redmine/scm/adapters/mercurial_adapter.rb
--- a/lib/redmine/scm/adapters/mercurial_adapter.rb
+++ b/lib/redmine/scm/adapters/mercurial_adapter.rb
@@ -45,6 +45,12 @@

def hgversion_from_command_line
%x{#{HG_BIN} --version}.match(/\(version (.*)\)/)[1]
+ rescue NoMethodError
+ hgversion_from_python
+ end
+
+ def hgversion_from_python
+ %x{python -c "from mercurial import util; print util.version()"}.strip
end

def template_path
</pre>

--------------------------------------------------------------------------------
TortoiseHG didn't install python, it compiles hg.
Not a solution.
--------------------------------------------------------------------------------
I create patch and finish test on Windows.
This patch for Redmine 0.9.3.

--------------------------------------------------------------------------------
IMHO, it would be simplier to assume that the version number is of the first line of the output.
Just like we do for other SCM:

<pre>
if m = io.gets.to_s.match(%r{((\d+\.)+\d+)})
version = m[0].scan(%r{\d+}).collect(&:to_i)
end
</pre>
--------------------------------------------------------------------------------
Patch based on Jean's advice.
--------------------------------------------------------------------------------
I fixed Yuya's "MQ":http://bitbucket.org/yuja/redmine-mq-issue4455/src/02e56cb49ed0/hg/version.diff which fails source:tags/1.0.2/test/unit/lib/redmine/scm/adapters/mercurial_adapter_test.rb and added new test.

--------------------------------------------------------------------------------
I pushed attachment:hg-version-20100929.diff to my github.

* http://github.com/marutosi/redmine/commit/hg-version
* http://github.com/marutosi/redmine/commit/8fcc83da4dd29c6f96cf7a9db445df604882e0aa
--------------------------------------------------------------------------------
Yuya reviewed and updated my previous patch and imported to his MQ.

* http://bitbucket.org/yuja/redmine-mq-issue4455/issue/7/request-for-refreshing-hg-versiondiff
* http://bitbucket.org/yuja/redmine-mq-issue4455/changeset/c5a47a5f63f5

I attach new patch and pushed my github.

* http://github.com/marutosi/redmine/commits/hg-version-yuya-mq-c5a47a5f63
* http://github.com/marutosi/redmine/commits/e2334dcb4b85976a1224

I wish to set target of this issue to next stable 1.0.3.
--------------------------------------------------------------------------------
I update the patch referring of "note-13":http://www.redmine.org/issues/6860#note-13 of #6860.

* change io.gets to io.read
* update regular expression for multi lines
* update test for multi lines

Please set this issue target next stable 1.0.4.

--------------------------------------------------------------------------------
Toshi MARUYAMA wrote:
> attachment:hg-version-20101114.diff

Hi, I think your patch is overengineerd. Here's a patch to fix this issue with minimal changes: attachment:hg-version-minimal-2010-11-15.patch

I have another one to fix this, attachment:hg-version-2010-11-15.patch, but it contains more changes to simplify the codes.

--------------------------------------------------------------------------------
I've committed hg-version-minimal-2010-11-15.patch in trunk and 1.0-stable as it solves the reported error.
Thanks.
--------------------------------------------------------------------------------
Unit test fails.

<pre>
$ LANG=C ruby test/unit/repository_mercurial_test.rb
./test/unit/../test_helper.rb:405: warning: don't put space before argument parentheses
/usr/lib/ruby/gems/1.8/gems/rails-2.3.5/lib/rails/gem_dependency.rb:119:Warning: Gem::Dependency#version_requirements is deprecated and will be removed on or after August 2010. Use #requirement
Loaded suite test/unit/repository_mercurial_test
Started
.EEEEE
Finished in 2.508805 seconds.

1) Error:
test_cat(RepositoryMercurialTest):
NoMethodError: undefined method `lines' for #<String:0x7fa9541f9a28>
lib/redmine/scm/adapters/mercurial_adapter.rb:47:in `hgversion_from_command_line'
lib/redmine/scm/adapters/mercurial_adapter.rb:40:in `hgversion'
lib/redmine/scm/adapters/mercurial_adapter.rb:33:in `client_version'
lib/redmine/scm/adapters/mercurial_adapter.rb:51:in `template_path'
lib/redmine/scm/adapters/mercurial_adapter.rb:108:in `revisions'
lib/redmine/scm/adapters/mercurial_adapter.rb:72:in `info'
lib/redmine/scm/adapters/abstract_adapter.rb:162:in `retrieve_root_url'
lib/redmine/scm/adapters/abstract_adapter.rb:54:in `initialize'
app/models/repository.rb:41:in `new'
app/models/repository.rb:41:in `scm'
test/unit/repository_mercurial_test.rb:67:in `test_cat'

</pre>
--------------------------------------------------------------------------------
I refresh a patch for SVN trunk based on Yuya's hg-version-2010-11-15.patch.

--------------------------------------------------------------------------------
Toshi MARUYAMA wrote:
> Unit test fails.

Gee, Ruby 1.8.6 doesn't seem to have String#lines method, sorry. Could you test the attached patch? attachment:mercurial_adapter_each_line.patch

--------------------------------------------------------------------------------
Yuya Nishihara wrote:
> Toshi MARUYAMA wrote:
> > Unit test fails.
>
> Gee, Ruby 1.8.6 doesn't seem to have String#lines method, sorry. Could you test the attached patch? attachment:mercurial_adapter_each_line.patch

It fails.
<pre>
$ ruby test/unit/repository_mercurial_test.rb
./test/unit/../test_helper.rb:405: warning: don't put space before argument parentheses
/usr/lib/ruby/gems/1.8/gems/rails-2.3.5/lib/rails/gem_dependency.rb:119:Warning: Gem::Dependency#version_requirements is deprecated and will be removed on or after August 2010. Use #requirement
Loaded suite test/unit/repository_mercurial_test
Started
.EEEEE
Finished in 3.546667 seconds.

1) Error:
test_cat(RepositoryMercurialTest):
LocalJumpError: no block given
lib/redmine/scm/adapters/mercurial_adapter.rb:47:in `each_line'
lib/redmine/scm/adapters/mercurial_adapter.rb:47:in `hgversion_from_command_line'
lib/redmine/scm/adapters/mercurial_adapter.rb:40:in `hgversion'
lib/redmine/scm/adapters/mercurial_adapter.rb:33:in `client_version'
lib/redmine/scm/adapters/mercurial_adapter.rb:51:in `template_path'
lib/redmine/scm/adapters/mercurial_adapter.rb:108:in `revisions'
lib/redmine/scm/adapters/mercurial_adapter.rb:72:in `info'
lib/redmine/scm/adapters/abstract_adapter.rb:162:in `retrieve_root_url'
lib/redmine/scm/adapters/abstract_adapter.rb:54:in `initialize'
app/models/repository.rb:41:in `new'
app/models/repository.rb:41:in `scm'
test/unit/repository_mercurial_test.rb:67:in `test_cat'

</pre>

<pre>
$ ruby --version
ruby 1.8.6 (2010-02-05 patchlevel 399) [x86_64-linux]
</pre>

<pre>
$ LANG=C rpm -qi ruby
Name : ruby Relocations: (not relocatable)
Version : 1.8.6.399 Vendor: Fedora Project
Release : 6.fc13 Build Date: Mon Aug 23 02:56:25 2010
Install Date: Wed Sep 1 10:42:01 2010 Build Host: x86-14.phx2.fedoraproject.org
Group : Development/Languages Source RPM: ruby-1.8.6.399-6.fc13.src.rpm
Size : 1740271 License: Ruby or GPLv2
Signature : RSA/SHA256, Tue Aug 24 02:03:58 2010, Key ID 7edc6ad6e8e40fde
Packager : Fedora Project
URL : http://www.ruby-lang.org/
Summary : An interpreter of object-oriented scripting language
Description :
Ruby is the interpreted scripting language for quick and easy
object-oriented programming. It has many features to process text
files and to do system management tasks (as in Perl). It is simple,
straight-forward, and extensible.

</pre>

--------------------------------------------------------------------------------
Toshi MARUYAMA wrote:
> > attachment:mercurial_adapter_each_line.patch
>
> It fails.

Hmm, @#each_line => Enumerator@ seems also introduced in 1.8.7, according to string.c:rb_str_each_line().
I changed #hgversion_from_command_line to return whole lines and updated the test case accordingly:

attachment:mercurial_adapter_1.8.6fix.patch

This should fix the problem on Ruby 1.8.6.
We could use String#to_a (only for 1.8.x) or String#split("\n"), but I think it's simple just not to eliminate trailing lines.
--------------------------------------------------------------------------------
I update the patch for SVN trunk referring JPL's implementation of r4419(#6860) which uses io.read and '\A' regular expression.

--------------------------------------------------------------------------------
Toshi MARUYAMA wrote:
> I update the patch for SVN trunk referring JPL's implementation of r4419(#6860) which uses io.read and '\A' regular expression.

Fix for 1.8.6 committed in r4422, thanks.
--------------------------------------------------------------------------------


related_issues

duplicates,Closed,7059,Error on the implementation issues Repository.fetch_changesets

Admin Redmine さんが3年以上前に更新

  • カテゴリSCM_3 にセット
  • 対象バージョン1.0.4_26 にセット

他の形式にエクスポート: Atom PDF

いいね!0
いいね!0