tips/misc/CVS タグ間で更新されたファイルのリスト作成

2008-05-18 (日) 23:48:26 (4046d)

CVS タグ間で更新されたファイルのリスト作成

CVS を利用している場合に、大きな改訂(バージョンアップ)があった場合など、 どのファイルが更新されているか知りたい場合があります。
ant の機能を利用すると、タグ間(あるいは日付間)のファイルの差異を XML あるいは html 形式で出力することができます。

事前準備

  • ant をインストールしてください。 ちなみに Eclipse であれば、ant の機能(多分 jar)を内部に持っているので ant 単体のインストールは不要です。
  • コマンドラインで扱える cvs クライアントをインストールしてください。 Windows であれば、tortoiseCVS などもコマンドライン用 exe を持っているようです。 (cvs.exe。元は CVSNT という別のモジュール?)。 この exe のあるフォルダを環境変数 PATH に追加しておいてください。
  • CVS のリポジトリへの接続が pserver の場合、下記コマンドで事前にログインしておいてください。
    % cvs -d :pserver:(ユーザー名)@(リポジトリ) login

手順

  1. 下記のような内容で build.xml (ant のビルド情報を保持するファイル)を作成してください。
    <?xml version="1.0" encoding="Windows-31J"?>
    
    <project name="PROJECT_NAME" default="cvstagdiff" basedir=".">
    
      <target name="cvstagdiff">
        <cvstagdiff
            cvsRoot=":pserver:CVS_USER@CVS_ROOT"
            destfile="target/tagdiff.xml"
            package="PACKAGE_NAME"
            startTag="START_TAG"
            endTag="END_TAG"
        />
        <xslt in="target/tagdiff.xml" 
               out="target/tagdiff.html" 
               style="./tagdiff.xsl">
          <param name="title" expression="CVS Tag Diff"/>
          <param name="module" expression="."/>
          <param name="cvsweb" expression="../"/>
        </xslt>
      </target>
    
    </project>
    
    PROJECT_NAME
    プロジェクト名
    CVS_USER
    CVS のユーザー
    CVS_ROOT
    CVS リポジトリ
    PACKAGE_NAME
    CVS 上のパッケージ名
    START_TAG
    比較したいタグ(古い方)
    END_TAG
    比較したいタグ(新しい方)
  2. 結果ファイルの整形に必要な tagdiff.xsl ファイルを、 build.xml と同じディレクトリに保存してください。
    tagdiff.xsl ファイルは、ant をインストールしていれば ant の etc ディレクトリにサンプルがあります。
    (tagdiff.xsl をコピーする代わりに、ant 内のオリジナルファイルをそのまま用いてもかまいません。 その場合、build.xml 内の style="./tagdiff.xsl" を オリジナルファイルのパスに書き換えてください)
  3. ターゲット cvstagdiff を指定して ant を実行してください。
    • コマンドラインから実行する場合は
      % ant cvstagdiff
    • Eclipse から実行する場合は
      build.xml を選択し、右クリック ->「実行」->「ant ビルド...」-> ターゲット cvstagdiff を選択

上記を実行すると、target ディレクトリの下に tagdiff.xml, tagdiff.html というファイル名で 差分のリストが出力されます。