Добавление таблицы разрешений на выполнение через Java приводит к пустой таблице разрешений
Я пытаюсь предоставить разрешение группе для папки в Perforce. Однако таблица разрешений, созданная / обновленная из Java в Perforce, пуста.
Ниже приведены шаги, которые я делаю -
//Get the server object.
IOptionsServer server = ServerFactory.getOptionsServer("p4java://<ip>:1666", null);
server.connect();
server.setUserName("<username>"); // this is a super user
server.login("<password>");
//Create a user group and add users.
IUserGroup ug = new UserGroup();
String groupName = "<usergroup_somename>;
ug.setName(groupName);
List<String> userList = new ArrayList<>();
userList.add("<username1>");
userList.add("<username2>");
userList.add("<username3>");
ug.setUsers(userList);
server.createUserGroup(ug);
//Get the permission table.
GetProtectionEntriesOptions gpo = new GetProtectionEntriesOptions();
gpo.setAllUsers(true);
List<IProtectionEntry> peList = server.getProtectionEntries(null, gpo);
//Create a new Protection entry
IProtectionEntry pe = new ProtectionEntry();
pe.setGroup(true);
pe.setName(groupName);
depotFilePath = "//depottest/Level1/Level2/..."; // the folders exist in Perforce
pe.setPath(depotFilePath);
pe.setMode("write");
pe.setHost("*");
pe.setPathExcluded(false);
pe.setOrder(peList.size());
pe.setType(EntryType.INCLUDE);
//Add the new created permission into the fetched Permission table list.
peList.add(pe);
//Create/Update the Permission table using either of the following methods separately or in combination creates a blank permission table.
server.createProtectionEntries(peList);
server.updateProtectionEntries(peList);
Согласно документации, методы в конце должны создать / заменить / обновить таблицу разрешений, однако этого не происходит, и вместо этого таблица разрешений на сервере Perforce удаляется / остается пустой.
Я могу что-то упустить. Может кто-нибудь дать несколько советов, как это исправить?
PS я пробовал использовать только updateProtectionEntries(peList)
метод или server.createProtectionEntries(peList)
метод и вместе, и все еще таблица разрешений на сервере Perforce пуста.
1 ответ
В Perforce есть форумы, на которых вы можете задавать вопросы: forums.perforce.com
Когда-то (в зависимости от версии P4Java и сервера) неправильные значения заказа могут потерять данные. Есть также проблема пробелов в пути.
Это работает для меня:
peList.add(pe);
// fix order values and spaces-in-path quoting
int i = 0;
for (IProtectionEntry pe : peList) {
pe.setOrder(i++);
if (pe.getPath().indexOf(" ") >= 0) {
// this bug should be fixed in 2014.X (no promises)
if (pe.isPathExcluded()) {
pe.setPath("\"-" + pe.getPath() + "\"");
pe.setPathExcluded(false);
} else {
pe.setPath("\"" + pe.getPath() + "\"");
}
}
}
try {
String createProtectionEntries = server.createProtectionEntries(peList);