相当于`p4 -c <wksp_name> sync` </wksp_name>

时间:2013-08-12 21:47:25

标签: tfs perforce tf-cli

作为从P4转换到TFS的过程的一部分,我需要将一些调用p4命令的自动脚本转换为它们的TFS等价物。

我的一个脚本执行了几个命令:

p4 <server-and-login-options> -c <wksp_name> client -i < <definition>
p4 <server-and-login-options> -c <wksp_name> sync [-f]

在Perforce中,这足以(可选)更改并完全同步特定工作区。这可以在Windows和Linux上无缝地工作。

在MSDN文档中闲逛了几个星期之后,似乎我没有在TFS中发现一个等价物。

我尝试使用TFS Java SDK来完成这项工作:

...
WorkingFolder[] workingFolders = ...;
Workspace wksp = null;
try
{
    wksp = vcs.getWorkspace(workspaceName, VersionControlConstants.AUTHENTICATED_USER);
    wksp.update(null, WORKSPACE_COMMENT, workingFolders, true);
}
catch (WorkspaceNotFoundException ex)
{
    wksp = vcs.createWorkspace(
        workingFolders,
        workspaceName,
        WORKSPACE_COMMENT,
        WorkspaceLocation.SERVER,
        WorkspaceOptions.NONE);
}

final VersionSpec versionSpec = LatestVersionSpec.INSTANCE;
GetOptions getOptions = GetOptions.NONE;
if (force)
    getOptions = getOptions.combine(GetOptions.GET_ALL);

final GetStatus getStatus = wksp.get(versionSpec, getOptions);
...

这适用于Windows。

但不是在Linux上。 getWorkspace / createWorkspace部分可以正常工作,效果可由tf workfold验证。但是,在Workspace.get内,程序崩溃并显示以下消息:

Exception in thread "main" java.lang.NoSuchMethodError: <init>
    at com.microsoft.tfs.jni.internal.filesystem.NativeFileSystem.nativeGetAttributes(Native Method)
    at com.microsoft.tfs.jni.internal.filesystem.NativeFileSystem.getAttributes(NativeFileSystem.java:74)
    at com.microsoft.tfs.jni.FileSystemUtils.getAttributes(FileSystemUtils.java:39)
    at com.microsoft.tfs.core.clients.versioncontrol.engines.internal.GetEngine.processOperation(GetEngine.java:1800)
    at com.microsoft.tfs.core.clients.versioncontrol.engines.internal.GetEngine.processOperationsInternal(GetEngine.java:1163)
    at com.microsoft.tfs.core.clients.versioncontrol.engines.internal.GetEngine.processOperations(GetEngine.java:957)
    at com.microsoft.tfs.core.clients.versioncontrol.engines.internal.GetEngine.processGetOperations(GetEngine.java:782)
    at com.microsoft.tfs.core.clients.versioncontrol.soapextensions.Workspace.get(Workspace.java:2429)
    at com.microsoft.tfs.core.clients.versioncontrol.soapextensions.Workspace.get(Workspace.java:2307)
    at com.microsoft.tfs.core.clients.versioncontrol.soapextensions.Workspace.get(Workspace.java:2295)
    at com.microsoft.tfs.core.clients.versioncontrol.soapextensions.Workspace.get(Workspace.java:2271)
    at TfsGet.main(TfsGet.java:181)

好吧,我不是一个Unix男孩,也不知道如何诊断和修复它。所以我尝试将getWorkspace / createWorkspace部分保留在Java中并调用tf get。但是,我似乎需要指定要更新的特定目录和文件。

我觉得这份工作必须相当普遍,不能相信没有人能完成它。

1 个答案:

答案 0 :(得分:1)

谢谢大家,Workspace.get中的错误原因是我自己的注意力不集中。 com.microsoft.tfs.sdk-11.0.0.jarlibnative_*.so文件的版本不匹配。现在我确保所有文件都相互匹配,问题就解决了。