Использование P4Package (Java) из приложения Java для проверки каталога Perforce - PullRequest
2 голосов
/ 17 сентября 2008

В веб-приложении, которое я пишу, пользователь должен указать путь в репозитории Perforce для узла, который он вводит. Предполагается, что приложение подтвердит, что введенный каталог существует в репо.

У меня есть библиотека P4Package (p4.jar), и я достаточно правильно ее настраиваю, чтобы она работала почти для всех, ЗА ИСКЛЮЧЕНИЕМ этой проверки каталога. Я создаю DirEntry (из p4.jar), используя настроенный Env и путь, но когда я вызываю DirEntry.sync (), он выдает неверную команду. Где я хочу это выдать команду:

p4 [config info] dirs directory_argument <- использование команды dirs для проверки dir </p>

Вместо этого выдает:

p4 [информация о конфигурации] dirs directory_argument% 1 <- заметьте посторонние% 1 </p>

Что всегда не получается, так как ни в одном из каталогов нет% 1 в конце.

Любая помощь? Есть ли другой способ проверить, существует ли каталог с помощью этого пакета?

Ответы [ 3 ]

1 голос
/ 20 сентября 2008

Итак, код, который я использовал, имел ошибку, из-за которой я должен был внести изменения и проверить код в своем хранилище.

Однако с тех пор Perforce разработала собственную оболочку Java для клиента P4, которая работает намного лучше. Я бы дал этому шанс.

1 голос
/ 03 февраля 2009

Я бы попробовал другую библиотеку, P4Java, вместо:

http://tek42.com/p4java

P4Java намного новее, и я обнаружил, что работает намного лучше, чем P4Package. Он используется в проекте Hudson, и я видел его в источнике Fisheye, хотя я не уверен, используют ли они его или нет.

1 голос
/ 17 сентября 2008

Похоже, что в команде sync есть ошибка в отношении записей dir и команды. Мое предложение было бы просто выполнить команду самостоятельно, используя командную строку Perforce, так как она должна быть в любом случае настроена для использования библиотеки Java.

Process p = Runtime.getRuntime().exec("p4 dirs " + directory_argument);
BufferedReader stdOut = new BufferedReader(new InputReader(p.InputStream()));
//Read the output of the command and process appropriately after this
...