言語ネゴシエーション/github を使った公開 の履歴(No.1)
更新- 履歴一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- ソフトウェア/rails/言語ネゴシエーション/github を使った公開 へ行く。
- 1
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 する