New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Windows版でファイルのパスが長い(259文字+null)場合、エラーになる。 #65

Closed
kazuna opened this Issue Apr 14, 2014 · 4 comments

Comments

Projects
None yet
2 participants
@kazuna

kazuna commented Apr 14, 2014

milkodeを1.4.0から1.6.0にバージョンアップした時にデーターベースを手動で更新して気づいたのですが、ファイルが長いパスにあるとデーターベースの構築が途中で異常終了してしまうようです。長いパスをサポートするか、少なくとも警告を出すだけで途中で終了しないようにすることはできませんでしょうか?例えば、rebuildやupdateにignore errorパラメーターを指定できる等。ご検討よろしくお願いします。

$ milk update --all
package    : xxx.sdk
C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.6.0/lib/milkode/database/updater.rb:209:in `ftype': No such file or directory - [very long path > (259 + null)] (Errno::ENOENT)
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.6.0/lib/milkode/database/updater.rb:209:in `block in searchDirectory'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.6.0/lib/milkode/database/updater.rb:198:in `foreach'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.6.0/lib/milkode/database/updater.rb:198:in `searchDirectory'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.6.0/lib/milkode/database/updater.rb:211:in `block in searchDirectory'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.6.0/lib/milkode/database/updater.rb:198:in `foreach'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.6.0/lib/milkode/database/updater.rb:198:in `searchDirectory'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.6.0/lib/milkode/database/updater.rb:211:in `block in searchDirectory'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.6.0/lib/milkode/database/updater.rb:198:in `foreach'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.6.0/lib/milkode/database/updater.rb:198:in `searchDirectory'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.6.0/lib/milkode/database/updater.rb:211:in `block in searchDirectory'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.6.0/lib/milkode/database/updater.rb:198:in `foreach'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.6.0/lib/milkode/database/updater.rb:198:in `searchDirectory'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.6.0/lib/milkode/database/updater.rb:211:in `block in searchDirectory'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.6.0/lib/milkode/database/updater.rb:198:in `foreach'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.6.0/lib/milkode/database/updater.rb:198:in `searchDirectory'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.6.0/lib/milkode/database/updater.rb:211:in `block in searchDirectory'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.6.0/lib/milkode/database/updater.rb:198:in `foreach'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.6.0/lib/milkode/database/updater.rb:198:in `searchDirectory'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.6.0/lib/milkode/database/updater.rb:211:in `block in searchDirectory'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.6.0/lib/milkode/database/updater.rb:198:in `foreach'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.6.0/lib/milkode/database/updater.rb:198:in `searchDirectory'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.6.0/lib/milkode/database/updater.rb:211:in `block in searchDirectory'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.6.0/lib/milkode/database/updater.rb:198:in `foreach'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.6.0/lib/milkode/database/updater.rb:198:in `searchDirectory'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.6.0/lib/milkode/database/updater.rb:211:in `block in searchDirectory'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.6.0/lib/milkode/database/updater.rb:198:in `foreach'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.6.0/lib/milkode/database/updater.rb:198:in `searchDirectory'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.6.0/lib/milkode/database/updater.rb:211:in `block in searchDirectory'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.6.0/lib/milkode/database/updater.rb:198:in `foreach'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.6.0/lib/milkode/database/updater.rb:198:in `searchDirectory'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.6.0/lib/milkode/database/updater.rb:211:in `block in searchDirectory'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.6.0/lib/milkode/database/updater.rb:198:in `foreach'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.6.0/lib/milkode/database/updater.rb:198:in `searchDirectory'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.6.0/lib/milkode/database/updater.rb:211:in `block in searchDirectory'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.6.0/lib/milkode/database/updater.rb:198:in `foreach'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.6.0/lib/milkode/database/updater.rb:198:in `searchDirectory'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.6.0/lib/milkode/database/updater.rb:163:in `db_add_dir'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.6.0/lib/milkode/database/updater.rb:156:in `update_dir'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.6.0/lib/milkode/database/updater.rb:39:in `exec'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.6.0/lib/milkode/cdstk/cdstk.rb:1154:in `updater_exec'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.6.0/lib/milkode/cdstk/cdstk.rb:1122:in `update_package_in'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.6.0/lib/milkode/cdstk/cdstk.rb:74:in `block (2 levels) in update_all'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.6.0/lib/milkode/cdstk/cdstk.rb:73:in `each'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.6.0/lib/milkode/cdstk/cdstk.rb:73:in `block in update_all'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.6.0/lib/milkode/cdstk/cdstk.rb:1210:in `print_result'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.6.0/lib/milkode/cdstk/cdstk.rb:70:in `update_all'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.6.0/lib/milkode/cdstk/cdstk.rb:83:in `update'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.6.0/lib/milkode/cli.rb:60:in `update'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/thor-0.18.1/lib/thor/command.rb:27:in `run'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/thor-0.18.1/lib/thor/invocation.rb:120:in `invoke_command'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.6.0/lib/milkode/cli.rb:245:in `invoke_command'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/thor-0.18.1/lib/thor.rb:363:in `dispatch'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/thor-0.18.1/lib/thor/base.rb:439:in `start'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.6.0/bin/milk:10:in `<top (required)>'
        from C:/Ruby/bin/milk:23:in `load'
        from C:/Ruby/bin/milk:23:in `<main>'

$ dir [very long path > (259 + null)]
The filename or extension is too long.

ongaeshi added a commit that referenced this issue Apr 15, 2014

Add FileTest.readable? (#65)
Warning if file is not readable.
#65
@ongaeshi

This comment has been minimized.

Show comment
Hide comment
@ongaeshi

ongaeshi Apr 15, 2014

Owner

報告ありがとうございます。いきなりのエラーですいません。

私の所でも再現することが出来たので、さきほど1.6.1をリリースしました。
File.type で読めないものはこちらで読むことは出来なそうなので警告を出す事にしました。

※ エラーが出る原因、長いファイル名ではなく、不正な文字列が混ざっている場合もあるようです。私の環境では以下のような文字列で起きていました

$ milk update
package    : xxx
warning    : Failed to FileTest.readable? - C:/home/......./文字に 窶晢シ夲シ壺?・を追加

周りにこのファイル名よりも長いものもあったので不正な文字列が原因で動かないこともあるようです。

Owner

ongaeshi commented Apr 15, 2014

報告ありがとうございます。いきなりのエラーですいません。

私の所でも再現することが出来たので、さきほど1.6.1をリリースしました。
File.type で読めないものはこちらで読むことは出来なそうなので警告を出す事にしました。

※ エラーが出る原因、長いファイル名ではなく、不正な文字列が混ざっている場合もあるようです。私の環境では以下のような文字列で起きていました

$ milk update
package    : xxx
warning    : Failed to FileTest.readable? - C:/home/......./文字に 窶晢シ夲シ壺?・を追加

周りにこのファイル名よりも長いものもあったので不正な文字列が原因で動かないこともあるようです。

@kazuna

This comment has been minimized.

Show comment
Hide comment
@kazuna

kazuna Apr 15, 2014

1.6.1で問題が起きなくなることを確認しました。
報告から僅か半日での対応、とても助かりました。
ありがとうございました。

kazuna commented Apr 15, 2014

1.6.1で問題が起きなくなることを確認しました。
報告から僅か半日での対応、とても助かりました。
ありがとうございました。

@kazuna

This comment has been minimized.

Show comment
Hide comment
@kazuna

kazuna Apr 15, 2014

蛇足ですが、パスの長さ(260文字以上)や特殊な文字(だめ文字)が入っている場合はUnicode版のAPIを使えばよいそうですが、お使いのライブラリ/フレームワークはANSI版のAPIを使っているのかもしれませんね。

kazuna commented Apr 15, 2014

蛇足ですが、パスの長さ(260文字以上)や特殊な文字(だめ文字)が入っている場合はUnicode版のAPIを使えばよいそうですが、お使いのライブラリ/フレームワークはANSI版のAPIを使っているのかもしれませんね。

@ongaeshi

This comment has been minimized.

Show comment
Hide comment
@ongaeshi

ongaeshi Apr 16, 2014

Owner

上手くいってよかったです!
情報ありがとうございます、なるほどWindowsにUnicode版とANSI版のAPIがあるのですね。

File.ftype はRuby標準の関数なので、
RubyInstaller等の内部でANSI版のAPIを使っているのかもしれないですね。

Owner

ongaeshi commented Apr 16, 2014

上手くいってよかったです!
情報ありがとうございます、なるほどWindowsにUnicode版とANSI版のAPIがあるのですね。

File.ftype はRuby標準の関数なので、
RubyInstaller等の内部でANSI版のAPIを使っているのかもしれないですね。

@ongaeshi ongaeshi closed this Apr 16, 2014

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment