文件不在客户端上

自从我开始实施工作空间感知以来,我在使用P4Python时遇到了一个非常奇怪的问题。

情况如下:

我有一个“P4Commands”模块,它继承P4并在__init__()

然后,我分别有以下类:

  • P4USER
  • P4Workspace
  • P4Changelist
  • P4Commands模块继承了P4并调用其父的“run”方法,同时还注入了一些自定义缓存以加速大量调用。 运行方法被调用如下:

    result = super(P4Commands, self).run(*args, **kwargs)
    

    然后记录并返回。

    当我在一个文件上调用一个操作时,我首先通过P4User来找出该文件所在的工作空间。然后,在发现匹配的工作空间实例上执行以下操作:

    def run(self, *args, **kwargs):
        # run whatever commands have to be run, with client temporarily set 
        # to this instance's client setting.
        with self.FUNCS.saved_context(client=self.client) as _:
            return self.FUNCS.run(*args, **kwargs)
    

    FUNCS是P4Commands模块实例。

    我得到的问题是,当我调用fstat时返回信息的文件, 只有当我调用“编辑”命令时 ,我才将“文件不在客户端上”作为错误。 其他任何命令(添加,fstat,where等)似乎都可以正常工作。 这只发生在编辑命令上。

    奇怪的是,当我使用完全相同的参数运行该方法时,但在工作空间上下文管理器之外(直接在P4User模块上),我没有收到错误。

    它变得更加怪异:我试图禁用上下文管理器,仍然没有喜悦。

    还有一件事要补充说,在阅读这篇文章时,你可能会想:“哦,客户端设置不正确”。 我尝试记录客户端工作区,并且正确设置和取消设置。 就像我说的,所有其他命令都可以工作,而不是编辑。

    唯一的情况是多个P4模块实例的连接受到干扰。 我试着让P4Commands成为一个静态全局,每个模块只共享一个实例。 那也没有结束。

    我尝试了各种方法,但在这一点上我有点卡住。 有没有人知道如何解决这个问题?


    经过大量的搜索,我设法解决了这个问题:

    我实例化了P4连接作为类成员,因为每个P4Workspace实例都共享相同的连接并试图获得所有权,这使得实例变得混乱。 尽管大多数命令都起作用,但这似乎是造成上述问题的连接问题。

    我最终解决这个问题的方式是将P4继承的类实例作为P4Workspace类的实例变量。 之前,它是一名班员。

    所以最终工作的结构是:

  • P4User - 类成员称为FUNCS,它为非工作区特定的调用实例连接。 包含多个P4Workspace实例。
  • P4Workspace - 称为“连接”的实例变量,它在实例上为perforce创建一个工作区特定的连接。
  • 链接地址: http://www.djcxy.com/p/39951.html

    上一篇: File (s) not on client

    下一篇: How to get UIDocumentMenuViewController functionality in iOS 11?