Я хочу иметь возможность загружать исправления, связанные со списками изменений в Code Collaborator, с помощью командной строки Windows. Это файлы, которые вы получаете в веб-интерфейсе, если нажмете External Diff. Они имеют расширение «.collabdiff» и на самом деле представляют собой заархивированные архивы, содержащие папки «до» и «после» каждого файла. Я намерен использовать их для трехстороннего слияния с помощью Subversion Merge.
Мой первый подход заключался в использовании утилиты командной строки Code Collaborator, например.
ccollab admin wget externaldiff?reviewid=%2^&changelistid=%3 > %OutputFile%
К сожалению, кажется, что здесь ожидаются только данные ASCII, потому что на экране появляется много текста и много звуковых сигналов.
Мой следующий подход состоял в том, чтобы использовать внешнюю ссылку напрямую. Для этого я повторно использовал фрагмент скрипта PowerShell, который нашел в Интернете:
::
:: GetCodeCollaboratorChangeList.cmd
::
:: Downloads a review change list from Code Collaborator.
::
:: %1 Code Collaborator Server
:: %2 Review Id
:: %3 Change List Id
::
@ECHO ON
SETLOCAL
SET OutputFile=%~dp0ChangeList_%2_%3.collabdiff
ECHO Creating %OutputFile%.
:: Sadly, the following line expects that ASCII text should be returned, but the URL returns binary text.
:: It beeps a little, and not much text gets redirected.
::ccollab admin wget externaldiff?reviewid=%2^&changelistid=%3 > %OutputFile%
:: So instead, we have to use our own download code.
SET URL="%1/externaldiff?reviewid=%2&changelistid=%3"
SET S=""
SET S="%S:~1,-1% $webclient = New-Object System.Net.WebClient;"
SET S="%S:~1,-1% $webclient.DownloadFile('%URL:~1,-1%','%OutputFile%');"
PowerShell.exe -ExecutionPolicy unrestricted -noprofile -command "& {%S:~1,-1%}"
EXIT /B
К сожалению, я получаю следующую ошибку:
Exception calling "DownloadFile" with "2" argument(s): "The remote server returned an error: (500) Internal Server Error."
At line:1 char:74
+ & { $webclient = New-Object System.Net.WebClient; $webclient.DownloadFile <<<< ('http://server1/externaldiff?reviewid=8077&changelistid=52915','C:\Documents and Settings\Administrator\Desktop\ChangeList_8077_52915.collabdiff');}
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException
Когда вы берете URL-адрес и вставляете его в браузер (а не нажимаете на ссылку), вы получаете следующую страницу:
HTTP Status 500 -
--------------------------------------------------------------------------------
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
java.lang.NullPointerException
com.smartbear.ccollab.datamodel.DataModelUtils.getDefaultPrevVersionToDiff(DataModelUtils.java:379)
com.smartbear.ccollab.datamodel.DataModelUtils.getDefaultPrevVersionToDiff(DataModelUtils.java:351)
com.smartbear.ccollab.rpc.ExternalDiffConfigServlet.getVersionsToDiff(ExternalDiffConfigServlet.java:373)
com.smartbear.ccollab.rpc.ExternalDiffConfigServlet.service(ExternalDiffConfigServlet.java:140)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
com.smartbear.ccollab.AuthTicketFilter.doFilter(AuthTicketFilter.java:74)
com.smartbear.ccollab.CollabCleanupFilter.doFilter(CollabCleanupFilter.java:30)
note The full stack trace of the root cause is available in the Apache Tomcat/6.0.20-patched logs.
--------------------------------------------------------------------------------
Apache Tomcat/6.0.20-patched
Я попытался изменить код для изменения свойств QueryString и BaseAddress по отдельности и вызвал .DownloadFile('/externaldiff, ...)
, но ошибка не изменилась.
Есть ли какие-либо предложения относительно того, как я могу загрузить эти файлы?