操作
バグ #208
完了beatorajaリポジトリのCRLF改行でLinuxコンテナ内のビルドスクリプトが動かない
バグ #208:
beatorajaリポジトリのCRLF改行でLinuxコンテナ内のビルドスクリプトが動かない
説明
refs #195
izu-ir #195(plugin実装)作業中に判明した申し送り事項。izu-ir の scripts/setup-beatoraja-jar.sh が beatoraja をクローン・ビルドして plugin/libs/beatoraja.jar を生成するが、以下のトラブルで DevContainer(Linux/bash)内でそのままは動かなかった。
現象¶
-
gradlewが CRLF 改行-
./gradlew実行時にfailed to run command './gradlew': No such file or directory(シェバン#!/bin/sh\rが/bin/sh\rと解釈される)。 -
sh gradlewでもgradlew: 61: : not found/Syntax error: newline unexpectedなど CRLF 起因のエラー。
-
-
scripts/setup-sibling-repos.shも CRLF 改行-
$'\r': command not found/set: pipefail: invalid option nameで失敗し、sibling パーサリポジトリ(../jbms-parser/../jbmstable-parser)がクローンされない。 - そのため
settings.gradleのincludeBuildが成立せず、bms.model.*(Mode 等)を参照する plugin コンパイルが通らない。
-
#195での回避(恒久対応ではない)¶
- sibling リポジトリを手動クローン(
git clone https://github.com/izu-san/jbms-parser.git他)。 - Gradle wrapper を
./gradlewではなくjava -classpath gradle/wrapper/gradle-wrapper.jar org.gradle.wrapper.GradleWrapperMainで直起動(CRLF の gradlew を避ける)。 - izu-ir 側
scripts/setup-beatoraja-jar.shにも上記の java 直起動を適用済み(ただし sibling 未取得時は依然として beatoraja 側 setup-sibling-repos.sh に依存)。
期待する恒久対応(beatoraja リポジトリ側)¶
-
.gitattributesでシェルスクリプト・gradlewをeol=lf(または* text=auto eol=lf)に固定し、チェックアウト改行を LF に統一する。 - 既存ファイルの改行を LF に正規化(
git add --renormalize .)。 - DevContainer の
postCreateCommandで sibling クローンが確実に走ることを確認。
影響¶
- izu-ir plugin(#195)のローカル compile/test、および beatoraja 自体のコンテナビルドの再現性・自動化に影響。
エージェント ちゃん さんが21日前に更新
- ステータス を 未着手 から 実装中 に変更
- 進捗率 を 0 から 10 に変更
実装に着手しました。
- ブランチ:
feature/208 - 対応方針: リポジトリ直下に
.gitattributesを追加してテキストは LF・*.bat/*.cmd/*.ps1は CRLF・バイナリはbinaryに固定し、git add --renormalizeで既存ファイル(CRLF混入の Java/bat 等)の改行を正規化。これにより各開発者のcore.autocrlf設定に依らず Linux コンテナ内でgradlew・scripts/*.shが確実に動作する。
エージェント ちゃん さんが21日前に更新
- ステータス を 実装中 から 完了 に変更
- 進捗率 を 10 から 100 に変更
対応が完了しました。
概要¶
Windows/Linux(DevContainer) 混在開発で gradlew や scripts/*.sh が CRLF でチェックアウトされ、Linux コンテナ内で /bin/sh^M: bad interpreter 等で動かない問題を、.gitattributes による改行ポリシー固定と既存ファイルの再正規化で恒久対応した。
変更点¶
-
.gitattributes(新規)を追加:-
* text=auto eol=lf(テキストは LF に正規化) -
*.sh/gradlew→ LF 強制(Linux 実行用) -
*.bat/*.cmd/*.ps1→ CRLF 強制(Windows 用、last-match-wins) - バイナリ 23 種(png/jpg/ttf/wav/jar/dll/exe 等)を
binary指定し改行変換から除外 - gitattributes は各開発者の
core.autocrlfを上書きするため恒久的に有効
-
-
git add --renormalize .で CRLF 混入の既存ファイルを LF 化(Java ソース 7 件 +*.bat2 件、内容変更なしの純粋な改行正規化、バイナリは一切不変更) - 変更ファイル:
.gitattributes(新規)、beatoraja-config.bat、beatoraja-config32.bat、src/bms/player/beatoraja/audio/PortAudioDriver.javaほか計 10 件
テスト¶
-
xvfb-run -a ./gradlew test --rerun-tasks: 成功(全 9 タスク実行、compile + test green) - 再チェックアウトで
gradlew/scripts/*.sh= LF、*.bat= CRLF を確認
関連 MR¶
- !40 (feature/208 → develop)、マージコミット 399bd8d
操作