ファイルが同一であるかをチェックするcondition

Antのconditionで、ファイルが同一であるかをチェックするFilesMatchというのが
あったので試してみる。


FilesMatchは、引数として2つのファイルを受け取り、
それらの内容が同じであるかをチェックしてくれる。
ソースを見る限りだと、次の条件の場合にtrueとなる。

    • どちらのファイル(ディレクトリ)も存在しない。
    • どちらともファイルであり、ファイルのパスが等しい。
    • どちらともファイルであり、ファイルの中身がバイナリレベルで等しい。


さらにAnt1.7からは、textfileというbooleanの引数が追加されていて、
改行コードを無視するかどうかを指定できる。


で、lengthと同様に、ふつーにAntを使う場合は
ほとんど使う機会はないかなぁ。

おまけ

FileMatchを試しに使ってみたときのコード。


<!-- どちらも存在しない -->
<condition property="ykhr.test1">
<filesmatch file1="nonexist1" file2="nonexist2" />
</condition>
<!-- file1のみ存在する -->
<condition property="ykhr.test2">
<filesmatch file1="exist1" file2="nonexist2" />
</condition>
<!-- 同じファイルを指定 -->
<condition property="ykhr.test3">
<filesmatch file1="hoge.txt" file2="hoge.txt" />
</condition>
<!-- 同じディレクトリを指定 -->
<condition property="ykhr.test4">
<filesmatch file1="directory" file2="directory" />
</condition>
<!-- 内容が同じファイルを指定 -->
<condition property="ykhr.test5">
<filesmatch file1="hoge.txt" file2="foo.txt" />
</condition>
<!-- 内容が違うファイルを指定 -->
<condition property="ykhr.test6">
<filesmatch file1="hoge.txt" file2="bar.txt" />
</condition>
<!-- 一方にディレクトリを指定 -->
<condition property="ykhr.test7">
<filesmatch file1="hoge.txt" file2="directory" />
</condition>
<echoproperties prefix="ykhr" />


実行結果。


exec:
[echoproperties] #Ant properties
[echoproperties] #Mon May 07 15:13:23 JST 2007
[echoproperties] ykhr.test5=true
[echoproperties] ykhr.test3=true
[echoproperties] ykhr.test1=true
BUILD SUCCESSFUL
Total time: 266 milliseconds

おまけ2

Antの1.7がリリースされて、初めてまともにマニュアルを見てみたけど、
condition関連は随分と新しいものが追加されてる。
そもそも、conditionなんてあんまり使わないと思うんだけど・・・。