0

コマンドラインから svn:ignore にいくつかのファイルを追加する必要があります。

しかし、svn:ignore プロパティの以前の値を削除せずにこれを行う必要があります。コマンドを使用する場合:

svn propset svn:ignore "*.jar" .

正しい無視値を設定しますが、以前の値をすべて消去します。これは私が望むものではありません。

Antスクリプトからこれを実行する必要があるため、使用svn propeditは私には適していません。

編集:移植性は私にとって問題ではありません(Windowsで作業する必要があります)が、サードパーティのAntライブラリをインストールできません。Subversionコマンドラインしかありません。

ヒントをお寄せいただきありがとうございます。

最終編集:興味のある人には、Ant スクリプトで提案されたソリューションを次のように実装しました。

<!-- Read current values and write them to a file -->
<exec executable="svn" output="${build}/current-props-file">
    <arg value="propget" />
    <arg value="svn:ignore" />
    <arg value="." />
</exec>
<!-- Reload the file, stripping away the value possibly already present to avoid duplicate -->
<loadfile srcfile="${build}/current-props-file" property="cleaned-props">
    <filterchain>
        <linecontains negate="true">
            <contains value=".jar" /> 
        </linecontains>
    </filterchain>
</loadfile>
<echo message="cleaned-props: ${cleaned-props}" />
<!-- Create file with final values to set -->
<echo file="${build}/cleaned-props-file" message="${cleaned-props}*.jar" />
<!-- Set property values -->
<exec executable="svn">
    <arg value="propset" />
    <arg value="svn:ignore" />
    <arg value="--file" />
    <arg value="${build}/cleaned-props-file" />
    <arg value="." />
</exec>
4

2 に答える 2

1

svnant タスクを試しましたか? SVN クライアント機能を Ant ビルドに直接統合できます。また、あなたが望むことをするように見えるignore taskもあります。

于 2012-11-30T16:18:16.810 に答える
1

更新する前に svn:ignore の値を読み取り、この値に新しい行を追加して、新しい値を設定できます。

$ ignores=$(svn propget svn:ignore .)
$ ignores="$ignores"$'\n'"*.jar"
$ svn propset svn:ignore "$ignores" .

一時ファイルを使用して古い値を保存することもできます。

$ svn propget svn:ignore . > /tmp/ignores
$ echo "*.jar" >> /tmp/ignores
$ svn propset svn:ignore -F /tmp/ignores .
$ rm -f /tmp/ignores

しかし、Ant スクリプトからこのコードを実行するので、その機能をSVNKitで実装することを提案します。コードは次のようになります。

File target = new File("");
SVNWCClient client = SVNClientManager.newInstance().getWCClient();
SVNPropertyData oldValue = client.doGetProperty(
    target,
    SVNProperty.IGNORE,
    SVNRevision.WORKING,
    SVNRevision.WORKING
);
String newValue = SVNPropertyValue.getPropertyAsString(oldValue.getValue()) +
                  '\n' + "*.jars";
client.doSetProperty(
    target,
    SVNProperty.IGNORE,
    SVNPropertyValue.create(newValue),
    false,
    SVNDepth.EMPTY,
    ISVNPropertyHandler.NULL,
    Collections.emptyList()
);

Ant スクリプトからこのコードを実行するには、IgnoresUpdate クラスのメイン メソッドに配置します。コンパイルして、.class ファイルをスクリプトで使用できるようにします。次に、次のように呼び出すことができます。

<java classname="IgnoresUpdate" fork="true">
    <classpath>
        <pathelement location="/path/to/compiled/IgnoresUpdate"/>
        <pathelement location="/path/to/svnkit.jar"/>
    </classpath>
</java>

ただし、Davidが回答で指摘したように、一般的に最良の解決策と思われるignore taskを使用できます(ただし、あなたのケースには当てはまらない場合があります)。

于 2012-11-30T16:23:10.500 に答える