ChefでCookbookをアップロードする際に".git"とか".svn"を含めたくないのでパッチを書いた

By clevercupcakes


基本的に、Chefのリポジトリ一式をバージョン管理していると、どうしてもCookbookのディレクトリとかに".git"とか".svn"とか入ってきますよね。(gitとSubversionはどっちでもいいけど)

".git"とか".svn"のディレクトリが、Chefリポジトリ内のfilesディレクトリの中に入ることで、ノードに".git"とか".svn"が一緒に配信(配置)されちゃいますし、web-uiとかでCookbookを参照しようとすると、エライ感じの画面表示になってしまいますw


ということで、Cookbookのアップロード時には、これらの".git"とか".svn"は含めないようにしたいところだが、そのようなオプションが存在しないみたいだ。そのうちCookbookのアップロード時に除外対象のオプションが付きそうな気もしますが、とりあえず的な対応くらいなら、簡単に直せそうだったので、以下の2ファイルをオレオレ改修してみました(パッチをあてました)。差分は以下です。

./chef/lib/chef/config.rb

$ diff -c config.rb config.rb.orig 
*** config.rb	2011-02-15 23:01:04.900965364 +0900
--- config.rb.orig	2011-02-15 22:49:03.336965586 +0900
***************
*** 236,241 ****
      # valid user and group name
      user_valid_regex [ /^([-a-zA-Z0-9_.]+)$/, /^\d+$/ ]
      group_valid_regex [ /^([-a-zA-Z0-9_.]+)$/, /^\d+$/ ]
-     cookbook_ignore_regex [ /.*\.git/ , /.*\.svn/ ]
    end
  end
--- 236,240 ----

./chef/lib/chef/cookbook_loader.rb

$ diff -c cookbook_loader.rb cookbook_loader.rb.orig 
*** cookbook_loader.rb	2011-02-15 23:04:00.560967102 +0900
--- cookbook_loader.rb.orig	2011-02-15 23:02:39.676965587 +0900
***************
*** 58,64 ****
              }
            end
            ignore_regexes = load_ignore_file(File.join(cookbook, "ignore"))
-           @ignore_regexes[cookbook_name].concat(Chef::Config.cookbook_ignore_regex)
            @ignore_regexes[cookbook_name].concat(ignore_regexes)
            
            load_files_unless_basename(
--- 58,63 ----

補足

ちなみに、↑のChef(chef-client)のバージョンは0.9.12です。
gemでインストールされるChefは、Ubuntuだと"/var/lib/gems/1.8/gems/chef-0.9.12/"のあたり。CentOSだと"/usr/lib/ruby/gems/1.8/gems/chef-0.9.12/"の辺にインストールされています。

# バージョンアップの際は、このパッチ分を忘れないようにしないとなぁ。