2
我正在嘗試創建一個Groovy腳本,它從我們的trunk中獲取更改列表的列表,並將它們逐個合併到發佈分支中。我想在本地提供所有更改列表,因爲我想在提交上游之前運行測試版本。但是,每當我運行該腳本時,我發現當我查看P4V時,所有合併都已放入默認更改列表中。我怎樣才能讓他們分開?如何在使用API時創建單獨的更改列表?
我的代碼(在Groovy,但使用Java API)如下:
final changeListNumbers = [ 579807, 579916, 579936 ]
final targetBranch = "1.0.7"
changeListNumbers.each { changeListNumber ->
final existingCl = server.getChangelist(changeListNumber)
final cl = new Changelist(
IChangelist.UNKNOWN,
client.getName(),
server.userName,
ChangelistStatus.NEW,
new Date(),
"${existingCl.id} - ${existingCl.description}",
false,
server
);
cl.fileSpecs = mergeChangeListToBranch(client, cl, changeListNumber, targetBranch)
}
def List<IFileSpec> mergeChangeListToBranch(final IClient client, final IChangelist changeList, final srcChangeListNumber, final String branchVersion){
final projBase = '//Clients/Initech'
final trunkBasePath = "$projBase/trunk"
final branchBasePath = "$projBase/release"
final revisionedTrunkPath = "$trunkBasePath/[email protected]$srcChangeListNumber,$srcChangeListNumber"
final branchPath = "$branchBasePath/$branchVersion/..."
println "trunk path: $revisionedTrunkPath\nbranch path is: $branchPath"
mergeFromTo(client, changeList, revisionedTrunkPath, branchPath)
}
def List<IFileSpec> mergeFromTo(final IClient client, final IChangelist changeList,final String sourceFile, final String destFile){
mergeFromTo(
client,
changeList,
new FileSpec( new FilePath(FilePath.PathType.DEPOT, sourceFile) ),
new FileSpec( new FilePath(FilePath.PathType.DEPOT, destFile ) )
)
}
def List<IFileSpec> mergeFromTo(final IClient client, final IChangelist changeList, final FileSpec sourceFile, final FileSpec destFile){
final resolveOptions = new ResolveFilesAutoOptions()
resolveOptions.safeMerge = true
client.resolveFilesAuto(
client.integrateFiles(sourceFile, destFile, null, null),
// client.integrateFiles(changeList.id, false, null, null, sourceFile, destFile),
resolveOptions
)
}
如果我嘗試IChangeList.update()
我得到以下錯誤:
Caught: com.perforce.p4java.exception.RequestException: Error in change specification.
Error detected at line 7.
Invalid status 'new'.
如果不是使用IChangelist.UNKNOWN
至existingCl.id + 10000
(它大於當前使用的任何現有更改列表編號)然後我得到
Caught: com.perforce.p4java.exception.RequestException: Tried to update new or default changelist