コード例 #1
0
    def p4Delete(self, desc="Deprecated via python script", stomp=0):
        """
        SYNOPSIS: Delete files in P4
        INPUTS:	desc* 	- Changelist name
                stomp*	- Overwrite
        RETURNS: Changelist
        Example: mP4.p4Delete("My Del File Changelist Name")
        """
        if not self.p4i:
            self.createP4Instance()
        if self.p4i:
            logger.debug('-- Entered p4Delete --')
            changeListNum = (0, "Doesn't Exist")
            if self.isInP4:
                # get latest
                self.p4Sync(1)
                if self.isCheckedOut:
                    if not self.isCheckedOut == getuser():
                        logger.warning('WARNING!: Checked out by %s' %
                                       self.isCheckedOut)
                        if not stomp:
                            return '-1%s' % self.isCheckedOut

                changeListNum = self.p4MakeChangeList(desc)
                self.p4i.run('delete', '-c%s' % changeListNum, self.depotPath)
                logger.debug('Marked "%s" for delete' % self.depotPath)
            return changeListNum
        else:
            logger.error('Could not create P4 instance')
            return 0
コード例 #2
0
    def p4Delete(self, desc="Deprecated via python script", stomp=0):
        """
        SYNOPSIS: Delete files in P4
        INPUTS:	desc* 	- Changelist name
                stomp*	- Overwrite
        RETURNS: Changelist
        Example: mP4.p4Delete("My Del File Changelist Name")
        """
        if not self.p4i:
            self.createP4Instance()
        if self.p4i:
            logger.debug('-- Entered p4Delete --')
            changeListNum = (0, "Doesn't Exist")
            if self.isInP4:
                # get latest
                self.p4Sync(1)
                if self.isCheckedOut:
                    if not self.isCheckedOut == getuser():
                        logger.warning('WARNING!: Checked out by %s' % self.isCheckedOut)
                        if not stomp:
                            return '-1%s' % self.isCheckedOut

                changeListNum = self.p4MakeChangeList(desc)
                self.p4i.run('delete', '-c%s' % changeListNum, self.depotPath)
                logger.debug('Marked "%s" for delete' % self.depotPath)
            return changeListNum
        else:
            logger.error('Could not create P4 instance')
            return 0
コード例 #3
0
    def __init__(self, maya=1, pyTargetVersion='26', fileName=None):
        """
        SYNOPSIS: 	Perforce Library class init
        INPUTS: 	maya* - instantiate for use in Maya
                    pyTargetVersion* - where to import P4 from
                    fileName* - Which system file name to act upon (self.fileName)
        Example: 	mP4 = pcsP4.P4Lib()
        """

        # Parse User XML
        userXML = ET.parse("%s/data/%s/PCSuser.xml" % (gv.toolsLocation, getpass.getuser()))
        self.userXMLcore = userXML.getiterator('Core')[0]
        p4Mode = self.userXMLcore.get('P4_Mode')

        # Parse Team XML
        globalXML = ET.parse("%s/installData/PCSstudio.xml" % gv.toolsLocation)
        self.globalXMLcore = globalXML.getiterator(self.userXMLcore.get('PCSactiveTeam'))[0]

        self.maya = maya
        self.pyTargetVersion = pyTargetVersion

        if fileName:
            self.fileName = fileName
        else:
            self._fileName = fileName
            self.depotPath = None

        if p4Mode:
            if self.maya:
                try:
                    # Path is hardcoded per team in PCSstudio.xml
                    from P4 import P4  # @UnusedImport @UnresolvedImport
                except ImportError:
                    logger.error('Failed to import P4 from Maya - check that the path is in pcsGlobalSetup')
            else:
                if self.pyTargetVersion == '26':
                    try:
                        if platform.architecture()[0] == '64bit':
                        # cannot import via '.' path, bug, must add this path to sys.path
                            # from perforce.p426.win64.P4 import P4 #@Reimport @UnresolvedImport @UnusedImport
                            from P4 import P4  # @Reimport @UnresolvedImport @UnusedImport
                        else:
                            # from perforce.p426.win32.P4 import P4 #@UnresolvedImport @Reimport @UnusedImport
                            from P4 import P4  # @UnresolvedImport @Reimport @UnusedImport
                    except ImportError:
                        logger.error('Failed to import P4 for pyTargetVersion - %s' % self.pyTargetVersion)
                elif self.pyTargetVersion == '25':
                    try:
                        # from perforce.p425.P4 import P4 #@Reimport @UnresolvedImport @UnusedImport
                        from P4 import P4  # @Reimport @UnresolvedImport @UnusedImport
                    except ImportError:
                        logger.error('Failed to import P4 for pyTargetVersion - %s' % self.pyTargetVersion)

            if self.canP4connect:
                self.createP4Instance()
                self.p4Connect()
        else:
            logger.warning('Perforce is turned off, if you want to use it, turn it on in your Maya menu')
コード例 #4
0
    def p4MakeChangeList(self, desc="Updated via python script"):
        """
        SYNOPSIS: Make a new changelist
        INPUTS:	desc* 	- Changelist name
        RETURNS: New Changelist
        Example: mP4.p4MakeChangeList("My New Changelist Name")
        """
        if not self.p4i:
            self.createP4Instance()
        if self.p4i:
            logger.debug('-- Entered p4MakeChangeList --')

            # check for desc length
            if len(desc) > 31:
                logger.warning("WARNING!: '%s' is longer than 31 characters, descriptions will NOT match." % desc)

            # create new list with:
            newChangeList = 0

            if not self.isP4Connected:
                logger.error('Could not connect')
                return False
                # check if already exists
            changeLists = self.p4i.run("changes", "-c%s" % self.p4i.client, "-spending")
            logger.debug("changeLists is '%s'" % changeLists)

            if changeLists:
                for cl in changeLists:

                    if self.p4Version == 2.4:
                        logger.debug("Checking p4 (Python 2.4) changelist: '%s'" % cl)
                        if re.search(desc, cl):
                            # list = P4 for Python 2.4
                            newChangeList = cl[cl.find(' ') + 1:cl.find('on') - 1]
                            logger.debug("Found desc: '%s' for changeList %s" % (desc, newChangeList))
                    elif self.p4Version == 2.5 or 2.6:
                        # dictionary = P4 for Python 2.5,2.6
                        logger.debug("Checking P4 (Python 2.5) changelist: '%s'" % cl)
                        if re.search(desc, cl["desc"]):
                            newChangeList = cl['change']

            if not newChangeList:
                change = ''
                if self.p4Version == 2.4:
                    change = 'Description:%s\nChange: new' % desc
                elif self.p4Version == 2.5 or 2.6:
                    change = {}
                    change["Description"] = desc
                    change['Change'] = 'new'
                self.p4i.input = change
                result = self.p4i.run('change', '-i')[0]
                newChangeList = result[result.find(' ') + 1:result.rfind(' ')]
            logger.debug("newChangeList is: '%s'" % newChangeList)
            logger.debug('-- Exiting p4MakeChangeList --')
            return newChangeList
        else:
            logger.error('Could not create P4 instance')
コード例 #5
0
    def p4CheckOut(self,
                   desc="Updated via python script",
                   force=0,
                   stomp=0,
                   sync=1,
                   returnTuple=0):
        """
        SYNOPSIS: Check out or add to P4
        INPUTS:	desc* 	- Changelist description
                force* 	- Force check out
                stomp*	- Overwrite
        RETURNS: Tuple (Success/Failure, changelist, userCheckedOutBy)
        Example: mP4.p4CheckOut("My Changelist Name")
        """
        if not self.p4i:
            self.createP4Instance()
        if self.p4i:
            logger.debug('-- Entered p4CheckOut --')
            if self.isInP4:
                # get latest
                if sync:
                    self.p4Sync(force)
                checkedOut = self.isCheckedOut
                if checkedOut:
                    if not checkedOut == getuser():
                        logger.warning("Checked out by %s" % checkedOut)
                        if not stomp:
                            return (0, checkedOut, 0)
                newChangeList = self.p4MakeChangeList(desc)
                self.p4i.run('edit', "-c%s" % newChangeList,
                             self.depotPath)  # moves file to newChangeList
                logger.info("***Checking out: '%s'***" % self.depotPath)
                logger.debug('-- Exiting p4CheckOut --')
                if checkedOut and stomp:
                    if not checkedOut == getuser():
                        return (1, newChangeList, checkedOut)
                    else:
                        return (1, newChangeList, 0)
                else:
                    return (1, newChangeList, 0)

            else:
                changeListNum = self.p4MakeChangeList(
                    desc.replace('Updated', 'Added'))
                try:
                    self.p4i.run("add", "-c%s" % changeListNum, self.depotPath)
                    return (1, changeListNum, 0)
                except:
                    pass
                    #print p4i.warnings()[0]
                logger.debug('Added to "%s" changelist' % changeListNum)
            logger.debug('-- Exiting p4CheckOut --')
        else:
            logger.error('Could not create P4 instance')
コード例 #6
0
	def p4Version(self):
		"""
		**Property, do not use ()**
		SYNOPSIS: Query perforce version
		INPUTS NONE
		RETURNS: Perforce version 
		Example: mP4.p4Version
		"""
		if (2, 4) < sys.version_info and sys.version_info < (2, 5): return 2.4
		if (2, 5) < sys.version_info and sys.version_info < (2, 6): return 2.5
		if (2, 5) < sys.version_info: return 2.6
		else:
			logger.warning('Could not determine P4 lib version.')
			return False
コード例 #7
0
    def p4CheckOut(self, desc="Updated via python script", force=0, stomp=0, sync=1, returnTuple=0):
        """
        SYNOPSIS: Check out or add to P4
        INPUTS:	desc* 	- Changelist description
                force* 	- Force check out
                stomp*	- Overwrite
        RETURNS: Tuple (Success/Failure, changelist, userCheckedOutBy)
        Example: mP4.p4CheckOut("My Changelist Name")
        """
        if not self.p4i:
            self.createP4Instance()
        if self.p4i:
            logger.debug('-- Entered p4CheckOut --')
            if self.isInP4:
                # get latest
                if sync:
                    self.p4Sync(force)
                checkedOut = self.isCheckedOut
                if checkedOut:
                    if not checkedOut == getuser():
                        logger.warning("Checked out by %s" % checkedOut)
                        if not stomp:
                            return (0, checkedOut, 0)
                newChangeList = self.p4MakeChangeList(desc)
                self.p4i.run('edit', "-c%s" % newChangeList, self.depotPath)    # moves file to newChangeList
                logger.info("***Checking out: '%s'***" % self.depotPath)
                logger.debug('-- Exiting p4CheckOut --')
                if checkedOut and stomp:
                    if not checkedOut == getuser():
                        return (1, newChangeList, checkedOut)
                    else:
                        return (1, newChangeList, 0)
                else:
                    return (1, newChangeList, 0)

            else:
                changeListNum = self.p4MakeChangeList(desc.replace('Updated', 'Added'))
                try:
                    self.p4i.run("add", "-c%s" % changeListNum, self.depotPath)
                    return (1, changeListNum, 0)
                except:
                    pass
                    #print p4i.warnings()[0]
                logger.debug('Added to "%s" changelist' % changeListNum)
            logger.debug('-- Exiting p4CheckOut --')
        else:
            logger.error('Could not create P4 instance')
コード例 #8
0
 def p4Version(self):
     """
     **Property, do not use ()**
     SYNOPSIS: Query perforce version
     INPUTS NONE
     RETURNS: Perforce version
     Example: mP4.p4Version
     """
     if (2, 4) < sys.version_info and sys.version_info < (2, 5):
         return 2.4
     if (2, 5) < sys.version_info and sys.version_info < (2, 6):
         return 2.5
     if (2, 5) < sys.version_info:
         return 2.6
     else:
         logger.warning('Could not determine P4 lib version.')
         return False
コード例 #9
0
    def p4MoveRename(self, newName, desc="Py Rename/Move file(s)", stomp=0):
        """
        SYNOPSIS: Move and rename files in P4
        INPUTS:	newName	- New path name (system or P4 path)
                desc* 	- [New change, old change]
                stomp*	- Overwrite
        RETURNS: Changelist
        Example: mP4.p4MoveRename(["My New File Changelist Name", "My Old File Changelist Name"])
        """
        if not self.p4i:
            self.createP4Instance()
        if self.p4i:
            logger.debug('-- Entered p4CheckOut --')
            if not re.search('//depot/', str(newName)):
                newDepotPath = pcsPath.Path(newName).toP4Path()
            else:
                newDepotPath = newName
            changeListNum = (0, "doesn't exist")
            if self.isInP4:
                # get latest
                self.p4Sync(1)

                checkedOut = self.isCheckedOut
                if checkedOut:
                    if not checkedOut == getuser():
                        logger.warning('WARNING!: Checked out by %s' %
                                       checkedOut)
                        if not stomp:
                            return (0, checkedOut)
                    # copy
                changeListNum = self.p4MakeChangeList(desc)
                self.p4i.run('integrate', '-c%s' % changeListNum,
                             self.depotPath, newDepotPath)
                logger.debug("Copied '%s' to '%s'" % (self._fileName, newName))

                # delete
                changeListNum = self.p4MakeChangeList(desc)
                self.p4i.run('delete', '-c%s' % changeListNum, self.depotPath)
                logger.debug('Marked "%s" for delete' % self._fileName)
            return changeListNum
        else:
            logger.error('Could not create P4 instance')
            return 0
コード例 #10
0
    def p4MoveRename(self, newName, desc="Py Rename/Move file(s)", stomp=0):
        """
        SYNOPSIS: Move and rename files in P4
        INPUTS:	newName	- New path name (system or P4 path)
                desc* 	- [New change, old change]
                stomp*	- Overwrite
        RETURNS: Changelist
        Example: mP4.p4MoveRename(["My New File Changelist Name", "My Old File Changelist Name"])
        """
        if not self.p4i:
            self.createP4Instance()
        if self.p4i:
            logger.debug('-- Entered p4CheckOut --')
            if not re.search('//depot/', str(newName)):
                newDepotPath = pcsPath.Path(newName).toP4Path()
            else:
                newDepotPath = newName
            changeListNum = (0, "doesn't exist")
            if self.isInP4:
                # get latest
                self.p4Sync(1)

                checkedOut = self.isCheckedOut
                if checkedOut:
                    if not checkedOut == getuser():
                        logger.warning('WARNING!: Checked out by %s' % checkedOut)
                        if not stomp:
                            return (0, checkedOut)
                    # copy
                changeListNum = self.p4MakeChangeList(desc)
                self.p4i.run('integrate', '-c%s' % changeListNum, self.depotPath, newDepotPath)
                logger.debug("Copied '%s' to '%s'" % (self._fileName, newName))

                # delete
                changeListNum = self.p4MakeChangeList(desc)
                self.p4i.run('delete', '-c%s' % changeListNum, self.depotPath)
                logger.debug('Marked "%s" for delete' % self._fileName)
            return changeListNum
        else:
            logger.error('Could not create P4 instance')
            return 0
コード例 #11
0
    def p4MakeChangeList(self, desc="Updated via python script"):
        """
        SYNOPSIS: Make a new changelist
        INPUTS:	desc* 	- Changelist name
        RETURNS: New Changelist
        Example: mP4.p4MakeChangeList("My New Changelist Name")
        """
        if not self.p4i:
            self.createP4Instance()
        if self.p4i:
            logger.debug('-- Entered p4MakeChangeList --')

            # check for desc length
            if len(desc) > 31:
                logger.warning(
                    "WARNING!: '%s' is longer than 31 characters, descriptions will NOT match."
                    % desc)

            # create new list with:
            newChangeList = 0

            if not self.isP4Connected:
                logger.error('Could not connect')
                return False
                # check if already exists
            changeLists = self.p4i.run("changes", "-c%s" % self.p4i.client,
                                       "-spending")
            logger.debug("changeLists is '%s'" % changeLists)

            if changeLists:
                for cl in changeLists:

                    if self.p4Version == 2.4:
                        logger.debug(
                            "Checking p4 (Python 2.4) changelist: '%s'" % cl)
                        if re.search(desc, cl):
                            # list = P4 for Python 2.4
                            newChangeList = cl[cl.find(' ') + 1:cl.find('on') -
                                               1]
                            logger.debug("Found desc: '%s' for changeList %s" %
                                         (desc, newChangeList))
                    elif self.p4Version == 2.5 or 2.6:
                        # dictionary = P4 for Python 2.5,2.6
                        logger.debug(
                            "Checking P4 (Python 2.5) changelist: '%s'" % cl)
                        if re.search(desc, cl["desc"]):
                            newChangeList = cl['change']

            if not newChangeList:
                change = ''
                if self.p4Version == 2.4:
                    change = 'Description:%s\nChange: new' % desc
                elif self.p4Version == 2.5 or 2.6:
                    change = {}
                    change["Description"] = desc
                    change['Change'] = 'new'
                self.p4i.input = change
                result = self.p4i.run('change', '-i')[0]
                newChangeList = result[result.find(' ') + 1:result.rfind(' ')]
            logger.debug("newChangeList is: '%s'" % newChangeList)
            logger.debug('-- Exiting p4MakeChangeList --')
            return newChangeList
        else:
            logger.error('Could not create P4 instance')
コード例 #12
0
    def __init__(self, maya=1, pyTargetVersion='26', fileName=None):
        """
        SYNOPSIS: 	Perforce Library class init
        INPUTS: 	maya* - instantiate for use in Maya
                    pyTargetVersion* - where to import P4 from
                    fileName* - Which system file name to act upon (self.fileName)
        Example: 	mP4 = pcsP4.P4Lib()
        """

        # Parse User XML
        userXML = ET.parse("%s/data/%s/PCSuser.xml" %
                           (gv.toolsLocation, getpass.getuser()))
        self.userXMLcore = userXML.getiterator('Core')[0]
        p4Mode = self.userXMLcore.get('P4_Mode')

        # Parse Team XML
        globalXML = ET.parse("%s/installData/PCSstudio.xml" % gv.toolsLocation)
        self.globalXMLcore = globalXML.getiterator(
            self.userXMLcore.get('PCSactiveTeam'))[0]

        self.maya = maya
        self.pyTargetVersion = pyTargetVersion

        if fileName:
            self.fileName = fileName
        else:
            self._fileName = fileName
            self.depotPath = None

        if p4Mode:
            if self.maya:
                try:
                    # Path is hardcoded per team in PCSstudio.xml
                    from P4 import P4  # @UnusedImport @UnresolvedImport
                except ImportError:
                    logger.error(
                        'Failed to import P4 from Maya - check that the path is in pcsGlobalSetup'
                    )
            else:
                if self.pyTargetVersion == '26':
                    try:
                        if platform.architecture()[0] == '64bit':
                            # cannot import via '.' path, bug, must add this path to sys.path
                            # from perforce.p426.win64.P4 import P4 #@Reimport @UnresolvedImport @UnusedImport
                            from P4 import P4  # @Reimport @UnresolvedImport @UnusedImport
                        else:
                            # from perforce.p426.win32.P4 import P4 #@UnresolvedImport @Reimport @UnusedImport
                            from P4 import P4  # @UnresolvedImport @Reimport @UnusedImport
                    except ImportError:
                        logger.error(
                            'Failed to import P4 for pyTargetVersion - %s' %
                            self.pyTargetVersion)
                elif self.pyTargetVersion == '25':
                    try:
                        # from perforce.p425.P4 import P4 #@Reimport @UnresolvedImport @UnusedImport
                        from P4 import P4  # @Reimport @UnresolvedImport @UnusedImport
                    except ImportError:
                        logger.error(
                            'Failed to import P4 for pyTargetVersion - %s' %
                            self.pyTargetVersion)

            if self.canP4connect:
                self.createP4Instance()
                self.p4Connect()
        else:
            logger.warning(
                'Perforce is turned off, if you want to use it, turn it on in your Maya menu'
            )