Мрачное свнант

У меня проблема с svnant. <svnModified /> На мою рабочую копию уходит более 3 минут (метаданные svn версии 1.7: с использованием последней версии svnant из HEAD). Если я пытаюсь проверить наличие модификаций с помощью TortoiseSVN 1.7.12, это займет не более 3 секунд. Если я получаю статус SVN из командной строки, это также занимает менее 3 секунд.

Мой тестовый файл сборки выглядит так:

<project name="tools" default="default" basedir=".">

  <path id="paths.classpath">
    <fileset dir="." caseSensitive="false">
      <include name="svnant/**/*.jar" />
    </fileset>
  </path>

  <typedef resource="org/tigris/subversion/svnant/svnantlib.xml" classpathref="paths.classpath" />

  <fileset id="filesets.svn.modified" dir="C:/Workspace/projects">
    <svnModified />
  </fileset>

  <target name="default">
    <pathconvert pathsep="&#xA;" property="target.output" refid="filesets.svn.modified" />
    <echo>${target.output}</echo>
  </target>

</project>

Я делаю что-то неправильно? Я попытался обновить svnkit до последней версии, но это не имело никакого значения. Я включаю слишком много или слишком мало банок? Другие детали: Ant 1.9.0, Windows 7 x64, Java 1.7.0_21 x64

Мои любимые:

+---lib
    antlr-runtime-3.4.jar
    jna-3.4.0.jar
    LICENSE-ANTLR.txt
    LICENSE-JAVAHL.txt
    LICENSE-JNA.txt
    LICENSE-SEQUENCE.txt
    LICENSE-SQLJET.txt
    LICENSE-TRILEAD.txt
    sequence-library-1.0.2.jar
    sqljet-1.1.7.jar
    svn-javahl.jar
    svnant.jar
    svnClientAdapter.jar
    svnkit-1.7.9.jar
    svnkit-cli-1.7.9.jar
    svnkit-javahl16-1.7.9.jar
    trilead-ssh2-1.0.0-build216.jar

1 ответ

Решение

Я не знаю точно, но я думаю, что при использовании svnModifiedsvn запрашивается для каждого файла в C:/Workspace/projects, Но при использовании svn status с помощью командной строки или с помощью TortoiseSVN все происходит в программном обеспечении svn. В первом случае, вероятно, существует множество небольших запросов по одному файлу, во втором случае - только один запрос по всему файловому дереву.

Чтобы улучшить производительность, я могу думать только о следующем:

  1. зовет svn status (через exec или же svnant задачи) и получить его вывод

  2. отфильтруйте вывод с помощью регулярного выражения, чтобы сохранить интересные строки об измененных файлах

  3. составьте список имен файлов и используйте resourcelist построить коллекцию ресурсов из этого плоского списка имен

Некоторые ссылки, которые могут вас заинтересовать:

Другие вопросы по тегам