1

Perforce でフォルダのグループに権限を付与しようとしています。ただし、Perforce で Java から作成/更新される権限テーブルは空です。

以下は私が行う手順です-

//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 サーバーの権限テーブルが削除/空白になります。

私は何かが欠けているかもしれません。誰かがこれを修正する方法についていくつかの提案をしてもらえますか?

PSupdateProtectionEntries(peList)メソッドのみまたはserver.createProtectionEntries(peList)メソッドと両方を一緒に使用してみましたが、Perforceサーバーのペミッションテーブルはまだ空白です。

4

1 に答える 1

2

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);
于 2014-06-20T22:45:07.030 に答える