git ls-files -z

bunlderで生成されるgemspecの記述でちょっと気になったところがあったので調べてみました。

以前の記述

gem.files         = `git ls-files`.split($\)

git ls-filesの結果をセット。
引数は Kernel.$\ のようで(module Kernel (Ruby 2.3.0)) 出力レコード区切りを表す文字列です。デフォルトは nil で、何も出力しません。とのこと。

最近の記述

spec.files         = `git ls-files -z`.split("\x0")

git ls-files -z となっています。
manの結果は以下。null文字をセットしているようです。

       -z
           \0 line termination on output.

おそらく、ファイルパス内に $\ で指定された文字列を含む場合を考慮したものなんでしょう。
今日のyak shavingでした。