Hello guys,
I want to ask a question related to Robomerge.
We are running robomerge in a non-distributed p4 setup - There is just one p4 server + replica. No edge servers.
While the merging is working most of the time without issues, robomerge sometimes tries to run “opened -x” command and throws an exception.
{“data”:“This command is only supported in a distributed configuration.\n”,“generic”:1,“severity”:3}
This stops the robomerge server and it has to be restarted. (Full log attached)
Strangely, it skips the whole “opened -x” afterwards and proceeds without errors:
robomerge-1 | 2025/10/08 15:00:07.553 [ROBOMERGE:dl=>sim-pres-split]: Merging CL 40434 via ROBOMERGE dl -> sim-pres-split (normal)
robomerge-1 | 2025/10/08 15:00:07.554 [ROBOMERGE:dl=>sim-pres-split]: Integrating CL 40434 to sim-pres-split
Is there any workaround for this issue?
I think robomerge falsely assumes there is an edge-server to run the command against which is not true.
From perforce.ts:
const serversOutput = await PerforceContext.execAndParse(logger, null, [“servers”]);
perforceMultiServerEnvironment = serversOutput.length > 1
opened(roboWorkspace: RoboWorkspace \| null, arg: number \| string, exclusive?: boolean) {
const workspace \= roboWorkspace \&\& coercePerforceWorkspace(roboWorkspace);
const args \= \['opened']
if (typeof arg \=\=\= 'number') {
// see what files are open in the given changelist
args.push('\-c', arg.toString())
}
else {
// see which workspace has a file checked out/added
args.push(exclusive \&\& perforceMultiServerEnvironment ? '\-x' : '\-a', arg)
}
return this.execAndParse(workspace, args) as Promise\<OpenedFileRecord\[]\>
}
Where p4 servers command in our env returns the following:
perforce-p66_forwarding-replica1 server 2kgadcp4r13:1666 forwarding-replica ‘’
perforce-p66_master server 2kgla1p4s6.2kgames.t2.corp:1666 standard ‘’
Thanks,
Michal