わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

ファイルが新しくなった〜生成ファイル編

自作プログラムをもとに,コマンドCが実行でき,実行すると,ファイルFが生成されるとします*1.自作プログラムは変更し得ること,またソフトウェアテストなどの洗練された手法は使用しないことを仮定します.
それで,自作プログラムの変更の前と後で,出力されるFの内容が変わらないかを確かめることを目標としますと,前後で出力ファイルの名前を変えて,diffで比較する方法もありますが,Subversionを使用すると,楽ができます.
もう少し,お膳立てを.簡単のため,自作プログラムは何らかの言語で書かれた単一のスクリプトファイルとし,実行権限をつけたうえで「./C」を実行すれば,カレントディレクトリに出力ファイルFを作るものとします.
では具体的な手順を.あらかじめSubversionをインストールしてから*2リポジトリと作業コピーのディレクトリを作ります.そこにCと,(変更前の)Fを置いて,コミット*3します.コマンドとしてはこんな感じ.

$ cd どこか
$ mkdir repo work
$ svnadmin create repo
$ svn co file://$PWD/repo work
$ cd work
$ cp また別のどこか/C .
$ chmod +x C
$ ./C
$ ls

最後の「ls」は,ファイルC,Fがあることの確認です.この時点では,まだコミットしていないどころか,ふたつのファイルがバージョン管理の対象となっていません.
ということで,バージョン管理の対象としてから,コミットします*4

$ svn add C F
$ svn ci -m ''

テキストエディタで,「どこか/C」のファイルを修正してから,

$ ./C
$ svn diff F

とします.Fに変更がなければ,何も出力されません.変更があれば,差分情報が出てきまして,プログラムCの変更により,出力も変更されることが確認できます.
変更を確認したら,次のいずれかを実行します.

  • 変更を保存する:svn ci -m ''
  • 変更を保存せず,元に戻す:svn revert C F*5

お知らせ

当エントリは,以下の三部作の一部です.残りの公開は,明日かもしれませんし,一生ないかもしれません.

  1. ファイルが新しくなった〜コマンド編
  2. ファイルが新しくなった〜自作ファイル編(未公表)
  3. ファイルが新しくなった〜生成ファイル編

*1:標準出力に送るというプログラムであれば,実行時に「> F」をつけることで,ファイルFに保存されます.リダイレクション機能ですね.

*2:DebianUbuntuなら,rootで「apt-get install subversion」.

*3:本日はSubversionの詳細には立ち入らないようにしたいのですが,最低限の用語を.「コミット」とは,作業コピーで行った各種修正を,リポジトリに送って登録することを言います.

*4:ここでもSubversionについて.Subversionに関するコマンドは「svn」で,コマンド名の直後に置くパラメータが処理名,残りはオプションだとかファイル名だとかパス名だとかです.処理名でcoはチェックアウトなのに対し,ciはチェックインの略で実はコミットと同義です.

*5:念のため,テキストエディタに修正後のCは残しておき,やっぱり残したいとなれば,上書きまたは名前を変えて保存し,確実に不要となれば,編集対象から外すといいでしょう.