言語ネゴシエーション/github を使った公開
このページの内容は非常に古いです(Rails 1.x.x)。最新の Rails では洗練された国際化の機構が標準で入っているため、下記は読むだけ無駄な内容になっています。
git リポジトリ(ローカル)の作成†
時代は subversion ではなく git なのだそうで。
http://www.kaeruspoon.net/articles/477 とか、
http://www.kaeruspoon.net/articles/479 とか、
http://www.netfort.gr.jp/~dancer/diary/200812.html.ja とか、
http://blog.champierre.com/archives/670
http://www.tempus.org/n-miyo/git-course-trans-ja/svn.ja.html
あたりを参考に。
まずは git のインストール。
LANG:console $ sudo aptitude install git-core 以下の新規パッケージがインストールされます: git-core liberror-perl{a} rsync{a} 先に進みますか? [Y/n/?] Y liberror-perl (0.17-1) を設定しています ... git-core (1:1.6.3.1-1) を設定しています ... rsync (3.0.5-1) を設定しています ... $ git --version git version 1.6.3.1 $ git config --global user.name "Osamu TAKEUCHI" $ git config --global user.email "osamu@big.jp" $ git config --global color.diff auto $ git config --global color.status auto $ git config --global color.branch auto $ git config --global color.interactive auto $ git config --global color.ui auto $ git config --global core.pager "lv -c" $ cat ~/.gitconfig [user] name = Osamu TAKEUCHI email = osamu@big.jp [color] diff = auto status = auto branch = auto interactive = auto ui = auto [core] pager = lv -c
vendor/plugins/language_negotiation 以下にあるプラグインと、
テスト用の Rails アプリケーションと、
2つのリポジトリを別々に作成する。
まずはプラグインの方から
LANG:console $ cd vendor/plugins/lanugage_negotiation/ $ git init Initialized empty Git repository in (rails)/negotiation/vendor/plugins/lanugage_negotiation/.git/ $ git add . $ git commit First commit of LanguageNegotiation plugin for Ruby on Rails Almost working with: Ruby version 1.8.7 (i486-linux) RubyGems version 1.3.2 Rails version 2.2.2 apache2 2.2.11-3 Documentation should be completed. [master (root-commit) 3df21b6] First commit of LanguageNegotiation plugin for Ruby on Rails 10 files changed, 636 insertions(+), 0 deletions(-) create mode 100644 MIT-LICENSE create mode 100644 README create mode 100644 Rakefile create mode 100644 init.rb create mode 100644 install.rb create mode 100644 lib/lanugage_negotiation.rb create mode 100644 tasks/lanugage_negotiation_tasks.rake create mode 100644 test/lanugage_negotiation_test.rb create mode 100644 test/test_helper.rb create mode 100644 uninstall.rb $ git status # On branch master nothing to commit (working directory clean)
次にテストアプリケーション
LANG:console $ cd ../../.. $ pwd (rails)/negotiation $ git init Initialized empty Git repository in (rails)/negotiation/.git/ $ mkdir db/migration $ find . -type d -empty|xargs -L1 -I{} touch {}/.gitignore # 空のディレクトリに .gitignore を作成 $ touch log/.gitignore tmp/.gitignore vendor/plugin/.gitignore $ cp config/database.yml config/database.sample.yml $ cat > .gitignore .DS_Store *~ /log/*.log /db/*.sqlite3 /config/database.yml /tmp/* !/tmp/*.gitignore !/tmp/cache !/tmp/pids !/tmp/sessions !/tmp/sockets /public/cahce_in_test_environment /vendor/plugins/language_negotiation $ git add . $ git status # On branch master # # Initial commit # # Changes to be committed: # (use "git rm --cached <file>..." to unstage) # # new file: .gitignore # new file: README # new file: Rakefile # new file: app/controllers/application.rb # new file: app/controllers/test_controller.rb # new file: app/helpers/application_helper.rb # new file: app/helpers/test_helper.rb # new file: app/models/.gitignore # new file: app/views/layouts/application.html.en.erb # new file: app/views/layouts/application.html.ja.erb # new file: app/views/layouts/application.text.en.erb # new file: app/views/test/_ok.html.en.erb # new file: app/views/test/_ok.html.ja.erb # new file: app/views/test/acceptid.html.ja.erb # new file: app/views/test/acceptid.text.ja.erb # new file: app/views/test/actioncached.html.en.erb # new file: app/views/test/actioncached.html.ja.erb # new file: app/views/test/fragmentcached.html.en.erb # new file: app/views/test/fragmentcached.html.ja.erb # new file: app/views/test/index.html.en.erb # new file: app/views/test/index.html.ja.erb # new file: app/views/test/onlyja.html.ja.erb # new file: app/views/test/pagecached.html.en.erb # new file: app/views/test/pagecached.html.ja.erb # new file: app/views/test/renderfile_.html.en.erb # new file: app/views/test/renderfile_.html.ja.erb # new file: config/boot.rb # new file: config/database.sample.yml # new file: config/environment.rb # new file: config/environments/development.rb # new file: config/environments/production.rb # new file: config/environments/test.rb # new file: config/initializers/inflections.rb # new file: config/initializers/mime_types.rb # new file: config/initializers/new_rails_defaults.rb # new file: config/locales/en.yml # new file: config/routes.rb # new file: db/migration/.gitignore # new file: db/schema.rb # new file: doc/README_FOR_APP # new file: doc/api # new file: lib/tasks/.gitignore # new file: log/.gitignore ... # new file: public/.htaccess # new file: public/404.html # new file: public/422.html # new file: public/500.html # new file: public/dispatch.cgi # new file: public/dispatch.fcgi # new file: public/dispatch.rb # new file: public/favicon.ico # new file: public/images/rails.png # new file: public/index.html # new file: public/javascripts/application.js # new file: public/javascripts/controls.js # new file: public/javascripts/dragdrop.js # new file: public/javascripts/effects.js # new file: public/javascripts/prototype.js # new file: public/robots.txt # new file: public/stylesheets/.gitignore # new file: script/about # new file: script/console # new file: script/dbconsole # new file: script/destroy # new file: script/generate # new file: script/performance/benchmarker # new file: script/performance/profiler # new file: script/performance/request # new file: script/plugin # new file: script/process/inspector # new file: script/process/reaper # new file: script/process/spawner # new file: script/runner # new file: script/server # new file: test/fixtures/.gitignore # new file: test/functional/test_controller_test.rb # new file: test/performance/browsing_test.rb # new file: test/test_helper.rb # new file: test/unit/.gitignore # new file: tmp/.gitignore # new file: tmp/cache/.gitignore # new file: tmp/pids/.gitignore # new file: tmp/sessions/.gitignore # new file: tmp/sockets/.gitignore # new file: vendor/actionmailer # new file: vendor/actionpack # new file: vendor/activemodel # new file: vendor/activerecord # new file: vendor/activeresource # new file: vendor/activesupport # new file: vendor/plugins/.gitignore # new file: vendor/rails # new file: vendor/railties # $ git commit Testing framework of LanguageNegotiation plugin for Ruby on Rails Works with: Ruby version 1.8.7 (i486-linux) RubyGems version 1.3.2 Rails version 2.2.2 apache2 2.2.11-3 ... $
git は空のディレクトリを無視するので、空のディレクトリ全てに .gitignore というファイルを作っておく。
個々のディレクトリの .gitignore にルールを書くことを勧める記述が 多いのだけれど、見通しが悪くなるのでルートディレクトリの .gitignore に 一元化するのがよいと思う。
ルールを / から始めるとリポジトリのルートディレクトリからの絶対パスとして、
ルールを / から始めなければ個々のディレクトリからの相対パスとして、解釈されるらしい。
tmp ディレクトリの指定が結構面倒で、
/tmp/*
とすると、.gitignore も含めて無視されるため、空のディレクトリとなった /tmp 自身も無視されてしまう。
!.giignore
とすることで、.gitignore は無視しないように指定できる。
同様に、/tmp/cache/.gitignore なども無視しないように書いたのが以下のルール。
!/tmp/*.gitignore !/tmp/cache !/tmp/pids !/tmp/sessions !/tmp/sockets
これでローカルに2つのリポジトリが作成できた。
プロジェクトを github に登録†
にアカウントを作成し、プロジェクト RailsLanguageNegotiationPlugin と RailsLanguageNegotiationPluginTestApp を作成。
表示されたガイダンスに沿う形で、
LANG:console $ git config --global github.user osamutake $ git config --global github.token c2b35c1bd09d64bf37a713702d7ae659 $ git remote add origin git@github.com:osamutake/RailsLanguageNegotiationPlugin.git $ git push origin master Permission denied (publickey). fatal: The remote end hung up unexpectedly $ cd ~/.ssh $ ls id_dsa ls: cannot access id_dsa: そのようなファイルやディレクトリはありません $ ssh-keygen # もし id_dsa がすでにあればスキップ Generating public/private rsa key pair. Enter file in which to save the key (/home/takeuchi/.ssh/id_rsa): (何もせずENTER) Enter passphrase (empty for no passphrase): (何もせずENTER) Enter same passphrase again: (何もせずENTER) Your identification has been saved in github. Your public key has been saved in github.pub. The key fingerprint is: ab:5e:07:df:a1:02:84:cf:a3:21:d1:7e:aa:38:b3:2f takeuchi@dora The key's randomart image is: +--[ RSA 2048]----+ | ................| | | +-----------------+ $ cat id_isa.pub ssh-rsa AAAB3Nza... $ # 表示された内容をコピーして https://github.com/account#keys の SSH Public Keys に追加 $ cd (rails)/negotiation/vendor/plugins/language_negotiation $ git push origin master Counting objects: 15, done. Compressing objects: 100% (13/13), done. Writing objects: 100% (15/15), 6.86 KiB, done. Total 15 (delta 0), reused 0 (delta 0) To git@github.com:osamutake/RailsLanguageNegotiationPlugin.git * [new branch] master -> master
https://github.com/ を見るとちゃんと登録されている。とても簡単。
取り出せる事をテスト†
じゃ、取り出せるか試してみるか、と軽い気持ちで操作したら、えらい事になった。
LANGUAGE:console $ cd .. $ mkdir language_negotiation2 $ cd language_negotiation2 $ git pull git@github.com:osamutake/RailsLanguageNegotiationPlugin.git From git@github.com:osamutake/RailsLanguageNegotiationPlugin * branch HEAD -> FETCH_HEAD Auto-merging README CONFLICT (add/add): Merge conflict in README Auto-merging Rakefile CONFLICT (add/add): Merge conflict in Rakefile Auto-merging test/test_helper.rb CONFLICT (add/add): Merge conflict in test/test_helper.rb Automatic merge failed; fix conflicts and then commit the result.
空のディレクトリでどうして conflict?
と思ったら、テストアプリケーションのリポジトリにマージされてました。
LANGUAGE:console $ cd ../../.. $ git status README: needs merge Rakefile: needs merge test/test_helper.rb: needs merge # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: MIT-LICENSE # new file: init.rb # new file: install.rb # new file: lib/lanugage_negotiation.rb # new file: tasks/lanugage_negotiation_tasks.rake # new file: test/lanugage_negotiation_test.rb # new file: uninstall.rb # # Changed but not updated: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # unmerged: README # unmerged: Rakefile # unmerged: test/test_helper.rb #
pull したのを取り消し、マージされたファイルを書き戻す。
LANGUAGE:console $ git reset HEAD README: locally modified Rakefile: locally modified test/test_helper.rb: locally modified $ git status # On branch master # Changed but not updated: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: README # modified: Rakefile # modified: test/test_helper.rb # # Untracked files: # (use "git add <file>..." to include in what will be committed) # # MIT-LICENSE # init.rb # install.rb # lib/lanugage_negotiation.rb # tasks/ # test/lanugage_negotiation_test.rb # uninstall.rb no changes added to commit (use "git add" and/or "git commit -a") $ rm MIT-LICENSE init.rb install.rb lib/lanugage_negotiation.rb $ rm test/lanugage_negotiation_test.rb uninstall.rb $ rm -r tasks $ git status # On branch master # Changed but not updated: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: README # modified: Rakefile # modified: test/test_helper.rb # no changes added to commit (use "git add" and/or "git commit -a") $ git checkout README Rakefile test/test_helper.rb $ git status # On branch master nothing to commit (working directory clean)
ふう。
git は親ディレクトリをさかのぼってリポジトリデータを検索する仕様なのね。
negotiation アプリケーションの外に出て、
LANGUAGE:console $ cd $ mkdir language_negotiation $ cd language_negotiation $ git pull git@github.com:osamutake/RailsLanguageNegotiationPlugin.git fatal: Not a git repository (or any of the parent directories): .git
あら、そもそも pull と書いていたのが間違い、と。
LANG:console $ git clone git@github.com:osamutake/RailsLanguageNegotiationPlugin.git Initialized empty Git repository in /home/takeuchi/language_negotiation/RailsLanguageNegotiationPlugin/.git/ remote: Counting objects: 15, done. remote: Compressing objects: 100% (13/13), done. remote: Total 15 (delta 0), reused 0 (delta 0) Receiving objects: 100% (15/15), 6.86 KiB, done. $ ls RailsLanguageNegotiationPlugin $ cd RailsLanguageNegotiationPlugin/ $ ls MIT-LICENSE README Rakefile init.rb install.rb lib tasks test uninstall.rb $ git status # On branch master nothing to commit (working directory clean) $ cd ../.. $ rm -rf language_negotiation/
正しく落とせている。
もしかして・・・
LANG:console $ cd (rails)/negotiation $ cd vendor/plugins/ $ git clone git@github.com:osamutake/RailsLanguageNegotiationPlugin.git Initialized empty Git repository in (rails)/negotiation/vendor/plugins/RailsLanguageNegotiationPlugin/.git/ remote: Counting objects: 15, done. remote: Compressing objects: 100% (13/13), done. remote: Total 15 (delta 0), reused 0 (delta 0) Receiving objects: 100% (15/15), 6.86 KiB, done. $ ls RailsLanguageNegotiationPlugin lanugage_negotiation $ ls RailsLanguageNegotiationPlugin MIT-LICENSE README Rakefile init.rb install.rb lib tasks test uninstall.rb $ git status # On branch master # Untracked files: # (use "git add <file>..." to include in what will be committed) # # RailsLanguageNegotiationPlugin/ nothing added to commit but untracked files present (use "git add" to track) $ rm -rf RailsLanguageNegotiationPlugin
これでもうまく行くわけね。
やはりもう少し git に慣れないと危険だ。
- Gitを使いこなすための20のコマンド http://sourceforge.jp/magazine/09/03/16/0831212/2
- Lern.github http://learn.github.com/
で、いきなり公開されてしまうのだから、もう少しドキュメントをしっかりしないとだめだと今更反省。
テストアプリケーションの方は特に、なので、しばらくローカルで更新して、整ったら push するのが良さそう。
ローカルでも履歴が取れるのが subversion よりも良いところみたい。
git を使った編集作業†
http://github.com/osamutake/RailsLanguageNegotiationPlugin/issues#issue/1
にも書いたけれど、言語の優先順位について考える必要がありそう。
これを例にして、git を使った編集作業について書く。
LANG:console $ jed vendor/plugins/language_negotiation/lib/language_negotiation.rb (編集) $ jed vendor/plugins/language_negotiation/test/language_negotiation_test.rb (編集) $ cd ../../.. $ rake test:plugins Loaded suite /usr/lib/ruby/1.8/rake/rake_test_loader Started ... Finished in 0.037807 seconds. 3 tests, 30 assertions, 0 failures, 0 errors $ rake test:functionals Loaded suite /usr/lib/ruby/1.8/rake/rake_test_loader Started .......................... Finished in 0.31159 seconds. 30 tests, 112 assertions, 0 failures, 0 errors
テストが無事通ったらコミット作業。
LANG:console $ cd vendor/plugins/language_negotiation $ git status # On branch master # Changed but not updated: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: lib/lanugage_negotiation.rb # modified: test/lanugage_negotiation_test.rb # no changes added to commit (use "git add" and/or "git commit -a") $ git diff (差分がカラー表示される) $ git add lib/lanugage_negotiation.rb test/lanugage_negotiation_test.rb $ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: lib/lanugage_negotiation.rb # modified: test/lanugage_negotiation_test.rb # $ git commit Adjust priority of template file without language specification When template files 'some.html.en' and 'some.html' exist, request for 'some.ja' should be processed with 'some.html' instead of 'some.html.en'. See http://github.com/osamutake/RailsLanguageNegotiationPlugin/issues#issue/1 Other improvements: - removed not being used ActionController::AbstractRequest::language - calls for ActionController::AbstractRequest.accepts_languages.first were replaced by those for ActionController::AbstractRequest.language_priority.first - optimized template_handler_extension extraction from template_path in ActionView::Base::_pick_template - removed not being used ActionController::Caching::Actions::ActionCachePath::language [master e3a80c3] Adjust priority of template file without language specification 2 files changed, 45 insertions(+), 44 deletions(-) $ git push Counting objects: 11, done. Compressing objects: 100% (6/6), done. Writing objects: 100% (6/6), 1.37 KiB, done. Total 6 (delta 3), reused 0 (delta 0) To git@github.com:osamutake/RailsLanguageNegotiationPlugin.git 3df21b6..e3a80c3 master -> master
以上でリモートリポジトリも更新される。
テストアプリケーションのコミットではちょっとミスした。
LANG:console $ cd ../../.. $ git status # On branch master # Changed but not updated: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: app/controllers/test_controller.rb # modified: test/functional/test_controller_test.rb # # Untracked files: # (use "git add <file>..." to include in what will be committed) # # app/views/test/nolang.html.erb # app/views/test/nolang.html.ja.erb $ git commit -a Adjust priority of template file without language specification When template files 'some.html.en' and 'some.html' exist, request for 'some.ja' should be processed with 'some.html' instead of 'some.html.en'. See http://github.com/osamutake/RailsLanguageNegotiationPlugin/issues#issue/1 [master 26c50dc] Adjust priority of template file without language specification 2 files changed, 49 insertions(+), 0 deletions(-) $ git status # On branch master # Untracked files: # (use "git add <file>..." to include in what will be committed) # # app/views/test/nolang.html.erb # app/views/test/nolang.html.ja.erb nothing added to commit but untracked files present (use "git add" to track) $ git add app/views/test/nolang.html.* $ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: app/views/test/nolang.html.erb # new file: app/views/test/nolang.html.ja.erb # $ git commit --amend [master 678da96] Adjust priority of template file without language specification 4 files changed, 51 insertions(+), 0 deletions(-) create mode 100644 app/views/test/nolang.html.erb create mode 100644 app/views/test/nolang.html.ja.erb $ git log commit 678da9633211e515a7ec56034bb7b46e6724bd3e Author: Osamu TAKEUCHI <osamu@big.jp> Date: Wed Jun 10 17:45:01 2009 +0900 Adjust priority of template file without language specification When template files 'some.html.en' and 'some.html' exist, request for 'some.ja' should be processed with 'some.html' instead of 'some.html.en'. See http://github.com/osamutake/RailsLanguageNegotiationPlugin/issues#issue/1 commit ad51715241e8f480da6de8d1d87035fea6c0d2ba Author: Osamu TAKEUCHI <osamu@big.jp> Date: Wed Jun 10 10:34:05 2009 +0900 Testing framework of LanguageNegotiation plugin for Ruby on Rails Works with: Ruby version 1.8.7 (i486-linux) RubyGems version 1.3.2 Rails version 2.2.2 apache2 2.2.11-3
git commit -a で変更点はすべてコミットされるかと思いきや、 新規作成ファイルについては対象外だったようだ。
手動で git add した後、git commit --amend したところ、 コミットのやり直しができて、ミスの形跡も残らなかった。
最後に github の該当する issue にコミット番号をコメントして、 Closed に移して一件落着。
CHANGELOG について†
ファイル中に変更履歴を残したい。
こんな手順で良いんだろうか?
LANG:console $ git log > CHANGELOG $ git add CHANGELOG $ git commit --amend $ cd vendor/plugins/language_negotiation $ git log > CHANGELOG $ git add CHANGELOG $ git commit --amend $ git push origin master To git@github.com:osamutake/RailsLanguageNegotiationPlugin.git ! [rejected] master -> master (non-fast forward) error: failed to push some refs to 'git@github.com:osamutake/RailsLanguageNegotiationPlugin.git' $ git push origin +master:master
最後の部分、--amend でコミットしたせいでリモートの情報とローカルの情報が 食い違ってしまっていて、そのままだと push させてくれない。
ローカルを優先して強制的に push するための呪文が git push origin +master:master らしい。
同様の現象は、ローカルでの作業中にリモートリポジトリが書き換わった 場合にも起きる。
その場合には素直に git pull origin master して、ローカル側を更新する事になる。
tar ball の作り方†
git ではなく tar ball で落としたい人向けに、 ファイルパスに "*.git*" を含まないファイルのみを 日付付きのファイル名に tar.gz してアップしておくと いいのかな、などと、
LANG:console $ find . -not -path '*/.git*' -a -type f | \ tar fcz `date +"language_negotiation-%y%m%d%H%M%S"` -T-
これを Downloads ページにアップロードすれば・・・
む、よく見たら Dowloads ページに行かなくてもページの真ん中に download ボタンがあって、これをクリックすればソースツリーを zip か tar で落とせる仕組みになっているんだね。
自分で tar ball を作る必要は無かったようでした。
スペルミスの修正†
!!!
今まで気づかなかったというのが信じられないほどに lanugage_negotiation 。
LANG:console $ cd .. $ mv lanugage_negotiation language_negotiation $ cd language_negotiation $ grep -i lanugage * */* README:LanugageNegotiation Rakefile:desc 'Test the lanugage_negotiation plugin.' Rakefile:desc 'Generate documentation for the lanugage_negotiation plugin.' Rakefile: rdoc.title = 'LanugageNegotiation' init.rb:require "lanugage_negotiation" lib/lanugage_negotiation.rb:# LanugageNegotiation tasks/lanugage_negotiation_tasks.rake:# task :lanugage_negotiation do test/lanugage_negotiation_test.rb:class LanugageNegotiationTest < ActiveSupport::TestCase $ jed (編集) $ grep -i lanugage * */* $ find . -iname lanu* ./test/lanugage_negotiation_test.rb ./tasks/lanugage_negotiation_tasks.rake ./lib/lanugage_negotiation.rb $ cd test $ git mv lanugage_negotiation_test.rb language_negotiation_test.rb $ ls language_negotiation_test.rb test_helper.rb $ cd ../tasks/ $ git mv lanugage_negotiation_tasks.rake language_negotiation_tasks.rake $ cd ../lib $ git mv lanugage_negotiation.rb language_negotiation.rb $ cd .. $ find . -iname lanu* $ git status # renamed: lib/lanugage_negotiation.rb -> lib/language_negotiation.rb # renamed: tasks/lanugage_negotiation_tasks.rake -> tasks/language_negotiation_tasks.rake # renamed: test/lanugage_negotiation_test.rb -> test/language_negotiation_test.rb # modified: README # modified: Rakefile # modified: init.rb # modified: lib/language_negotiation.rb # modified: tasks/language_negotiation_tasks.rake # modified: test/language_negotiation_test.rb $ cd ../../.. $ rake test:plugins 3 tests, 30 assertions, 0 failures, 0 errors $ rake test:functionals 30 tests, 112 assertions, 0 failures, 0 errors $ cd vendor/plugins/language_negotiation/ $ git commit -a -m "Typo fixing lanugage -> language" [master aef2a17] Typo fixing lanugage -> language 6 files changed, 9 insertions(+), 9 deletions(-) rename lib/{lanugage_negotiation.rb => language_negotiation.rb} (99%) rename tasks/{lanugage_negotiation_tasks.rake => language_negotiation_tasks.rake} (67%) rename test/{lanugage_negotiation_test.rb => language_negotiation_test.rb} (98%) $ git status nothing to commit (working directory clean) $ git log > CHANGELOG $ git commit -a --amend [master 79ce1e9] Typo fixing lanugage -> language 7 files changed, 16 insertions(+), 10 deletions(-) rename lib/{lanugage_negotiation.rb => language_negotiation.rb} (99%) rename tasks/{lanugage_negotiation_tasks.rake => language_negotiation_tasks.rake} (67%) rename test/{lanugage_negotiation_test.rb => language_negotiation_test.rb} (98%) $ git push origin master
アプリケーション側のコードに全く触れずに済むあたり、Rails の設計の良さが光る。
プラグイン内にしても、ドキュメント部分を除けば
init.rb:require "lanugage_negotiation" test/lanugage_negotiation_test.rb:class LanugageNegotiationTest < ActiveSupport::TestCase
この2つだけ。
しかも後者は必ずしも直す必要のない部分。
すばらしい。
PS 今まで気づかなかったのが恐ろしい。
CHANGELOG 更新コマンド†
メッセージの入力を求められるのがおっくうなとき、git commit の
- C オプションが使える。
LANG:console $ test -d .git && \ git log > CHANGELOG && \ git commit -a --amend -C `head -1 CHANGELOG | sed "s/.* //"`
- .git ディレクトリが存在すれば
(リポジトリのトップディレクトリである事を確認してから) - git log を CHANGELOG に入れ
- 前回と同じメッセージを付けて commit する