Ejemplo n.º 1
0
    def p4Submit(self, changeList):
        """
        SYNOPSIS: Submit a specified changelist to P4
        INPUTS:	changeList 	- Changelist name
        RETURNS: True/False
        Example: mP4.p4Submit(changeList)
        """
        if not self.p4i:
            self.createP4Instance()
        if self.p4i:
            logger.debug('-- Entered p4Submit --')
            if self.isInP4:
                if self.isCheckedOut:
                    logger.debug("\n***Submitting In: '%s'***\n" % self.depotPath)
                    try:
                        change = self.p4i.fetch_change(changeList)
                        result = self.p4i.save_submit(change)
                    except:
                        logger.error('p4 Submit failed')

                    logger.debug('-- Exiting p4Submit --')
                    return result

            logger.debug('-- Exiting p4Submit --')
        else:
            logger.error('Could not create P4 instance')
            return 0
Ejemplo n.º 2
0
    def isInP4(self):
        """
        **Property, do not use ()**
        SYNOPSIS: Check if file is in depot
        INPUTS NONE
        RETURNS: True/False
        Example: mP4.isInP4
        """
        if not self.p4i:
            self.createP4Instance()
        if self.p4i:
            logger.debug('-- Entered isInP4 --')
            try:
                result = self.p4i.run("files", self.depotPath)
                if result:
                    result = 1
            except:
                result = 0

            logger.debug('- isInP4 Result is -- %s' % result)
            logger.debug('- Exiting isInP4 --')

            return result
        else:
            logger.error('Could not create P4 instance')
Ejemplo n.º 3
0
    def p4Connect(self):
        """
        SYNOPSIS: Attempts to connect to perforce
        INPUTS NONE
        RETURNS: True/None
        Example: mP4.p4Connect()
        """
        if not self.p4i:
            self.createP4Instance()
        if self.p4i:
            logger.debug('-- Entered p4Connect --')
            if not self.isP4Connected:
                if self.activeTeam:
                    logger.debug('P4 UserName is - %s' %
                                 self.userXMLcore.get('PCSP4userName'))
                    logger.debug('P4 Workspace is - %s' %
                                 self.userXMLcore.get('PCSP4workspace'))
                    logger.debug('P4 Server is - %s' %
                                 self.globalXMLcore.get('P4_Server'))
                    self.p4i.user = self.userXMLcore.get('PCSP4userName')
                    self.p4i.client = self.userXMLcore.get('PCSP4workspace')
                    self.p4i.port = self.globalXMLcore.get('P4_Server')
                    self.p4i.connect()
                    self.p4Version
                else:
                    logger.error('No active team set/Team P4 data is missing')

            logger.debug('-- Exiting p4Connect --')
            return True
        else:
            logger.error('Could not create P4 instance')
Ejemplo n.º 4
0
    def p4Connect(self):
        """
        SYNOPSIS: Attempts to connect to perforce
        INPUTS NONE
        RETURNS: True/None
        Example: mP4.p4Connect()
        """
        if not self.p4i:
            self.createP4Instance()
        if self.p4i:
            logger.debug('-- Entered p4Connect --')
            if not self.isP4Connected:
                if self.activeTeam:
                    logger.debug('P4 UserName is - %s' % self.userXMLcore.get('PCSP4userName'))
                    logger.debug('P4 Workspace is - %s' % self.userXMLcore.get('PCSP4workspace'))
                    logger.debug('P4 Server is - %s' % self.globalXMLcore.get('P4_Server'))
                    self.p4i.user = self.userXMLcore.get('PCSP4userName')
                    self.p4i.client = self.userXMLcore.get('PCSP4workspace')
                    self.p4i.port = self.globalXMLcore.get('P4_Server')
                    self.p4i.connect()
                    self.p4Version
                else:
                    logger.error('No active team set/Team P4 data is missing')

            logger.debug('-- Exiting p4Connect --')
            return True
        else:
            logger.error('Could not create P4 instance')
Ejemplo n.º 5
0
    def p4Submit(self, changeList):
        """
        SYNOPSIS: Submit a specified changelist to P4
        INPUTS:	changeList 	- Changelist name
        RETURNS: True/False
        Example: mP4.p4Submit(changeList)
        """
        if not self.p4i:
            self.createP4Instance()
        if self.p4i:
            logger.debug('-- Entered p4Submit --')
            if self.isInP4:
                if self.isCheckedOut:
                    logger.debug("\n***Submitting In: '%s'***\n" %
                                 self.depotPath)
                    try:
                        change = self.p4i.fetch_change(changeList)
                        result = self.p4i.save_submit(change)
                    except:
                        logger.error('p4 Submit failed')

                    logger.debug('-- Exiting p4Submit --')
                    return result

            logger.debug('-- Exiting p4Submit --')
        else:
            logger.error('Could not create P4 instance')
            return 0
Ejemplo n.º 6
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
Ejemplo n.º 7
0
    def isInP4(self):
        """
        **Property, do not use ()**
        SYNOPSIS: Check if file is in depot
        INPUTS NONE
        RETURNS: True/False
        Example: mP4.isInP4
        """
        if not self.p4i:
            self.createP4Instance()
        if self.p4i:
            logger.debug('-- Entered isInP4 --')
            try:
                result = self.p4i.run("files", self.depotPath)
                if result:
                    result = 1
            except:
                result = 0

            logger.debug('- isInP4 Result is -- %s' % result)
            logger.debug('- Exiting isInP4 --')

            return result
        else:
            logger.error('Could not create P4 instance')
Ejemplo n.º 8
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
Ejemplo n.º 9
0
    def isCheckedOut(self):
        """
        **Property, do not use ()**
        SYNOPSIS: Check if file is checked out
        INPUTS NONE
        RETURNS: True/False
        Example: mP4.isCheckedOut
        """
        if not self.p4i:
            self.createP4Instance()
        if self.p4i:
            logger.debug('-- Entered isCheckedOut --')
            checkedOut = 0
            if self.isInP4:
                logger.debug('%s is in depot' % self.depotPath)
                stats = self.p4i.run("opened", "-a", self._fileName)
                if stats:
                    if self.p4Version == 2.4:
                        logger.debug('p4(Python2.4) stats are:%s' % stats)
                        if not stats[0].find(' by ') == -1:
                            checkedOut = stats[0][stats[0].rfind(' ') + 1:]
                    elif self.p4Version == 2.5 or 2.6:
                        logger.debug('P4(Python2.5) stats are:\n%s' % '\n'.join(
                            '%s,%s' % (stat, stats[0][stat]) for stat in stats[0].keys()))

                        if stats[0].has_key('user'):
                            logger.debug('Already checked out by: %s' % stats[0]['user'])
                            checkedOut = stats[0]['user']
                logger.debug('Not checked out.')

            logger.debug('-- Exiting isCheckedOut --')
            return checkedOut
        else:
            logger.error('Could not create P4 instance')
            return 0
Ejemplo n.º 10
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')
Ejemplo n.º 11
0
	def p4DescribeChangeList(self, changeListNum):
		"""
		NAME: p4DescribeChangList
		
		SYNOPSIS
		 Queries changeList and returns files and description
		
		INPUTS	* = optional
		 (int)			changListNum:	changeList to lookup	
	
		##RETURNS: (list),(string)	files, desc 
		RETURNS: (string)	description
		"""
		if not self.p4i: self.createP4Instance()
		if self.p4i:	
			logger.debug('-- Entered p4DescribeChangList --')
			description = ''
			try:
				if self.p4Version == 2.4:
					results = self.p4i.run('describe', '-dc', str(changeListNum))
					if not results:
						logger.info("Changelist %s probably doesn't exist" % changeListNum)
						return
					doneWithDesc, doneWithFiles = [0, 0]
					desc, files = [[], []]
					for line in results:
						if 'Affected files ' in line: doneWithDesc = 1
						if 'Differences ' in line: doneWithFiles = 1
						if not doneWithDesc: desc.append(line)
						elif not doneWithFiles: files.append(line)
		
					text = '\nDescription of change:\n\n'
					for des in desc:
						if des[:1] == '\t': des = des[1:]	# remove tab
						text = '%s%s\n' % (text, des)
					for _file in files:
						if _file[:2] == '//': _file = _file[:-5]	# remove '#edit'
						text = '%s%s\n' % (text, _file)
					description = text
				elif self.p4Version == 2.5 or 2.6:
					results = self.p4i.run('describe', '-dc', changeListNum)[0]
					files = results['depotFile']
					desc = results['desc']
					#description = [desc, files]
					filesText = ''
					for _file in files:
						filesText = '%s%s\n' % (filesText, _file)
					description = '\nDescription of change:\n\n%s\n\nAffected files ...\n\n%s\n' % (desc, filesText)
			except:
				logger.info("Changelist %s probably doesn't exist" % changeListNum)
				return
		
			return description
		else:
			logger.error('Could not create P4 instance')
Ejemplo n.º 12
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')
Ejemplo n.º 13
0
 def isLatest(self):
     """
     **Property, do not use ()**
     SYNOPSIS: Check if file is latest
     INPUTS NONE
     RETURNS: True/False
     Example: mP4.isLatest
     """
     if not self.p4i:
         self.createP4Instance()
     if self.p4i:
         logger.debug('-- Entered isLatest --')
         if self.isInP4:
             try:
                 if not pcsPath.Path(self._fileName).isdir():
                     fileStatDict = self.p4i.run("fstat", self.depotPath)
                     if fileStatDict:
                         if fileStatDict[0]['headRev'] == fileStatDict[0][
                                 'haveRev']:
                             logger.debug(
                                 'Head revision - %s - same as Have Revision - %s - on file file - %s'
                                 % (str(fileStatDict[0]['headRev']),
                                    str(fileStatDict[0]['haveRev']),
                                    self.depotPath))
                             return 1
                         else:
                             logger.debug(
                                 'Head revision - %s - not the same as Have Revision - %s - on file file - %s'
                                 % (str(fileStatDict[0]['headRev']),
                                    str(fileStatDict[0]['haveRev']),
                                    self.depotPath))
                             return 0
                     else:
                         logger.debug(
                             'Empty fstat list returned on file - %s' %
                             self.depotPath)
                         return 0
                 else:
                     logger.debug('Passed file is a directory - %s' %
                                  self.depotPath)
                     return 0
             except:
                 logger.debug('Failed on file - %s' % self.depotPath)
                 return 0
         else:
             logger.debug('File not in perforce - %s' % self.depotPath)
             return 0
     else:
         logger.error('Could not create P4 instance')
     logger.debug('- Exiting isLatest --')
Ejemplo n.º 14
0
	def p4RevertChangelist(self, changelist):
			
		if not self.p4i: self.createP4Instance()
		if self.p4i:
			logger.debug('-- Entered p4RevertChangelist --')
			try:
				self.p4i.run('revert', "-c%s" % changelist, '//...')
				logger.info("***Reverting: '%s'***" % self.fileName)
				return 1
			except:
				return 0
			logger.debug('-- Exiting p4RevertChangelist --')
		else:
			logger.error('Could not create P4 instance')
			return 0
Ejemplo n.º 15
0
	def p4DeleteChangelist(self, changelist, enforceEmpty=1):
		
		if not self.p4i: self.createP4Instance()
		if self.p4i:
			logger.debug('-- Entered p4DeleteChangelist --')
			try:
				self.p4i.run('change', "-d", int(changelist))
				logger.info("***Deleting changelist: '%s'***" % changelist)
				return 1
			except:
				return 0
			logger.debug('-- Exiting p4DeleteChangelist --')
		else:
			logger.error('Could not create P4 instance')
			return 0
Ejemplo n.º 16
0
    def p4RevertChangelist(self, changelist):

        if not self.p4i:
            self.createP4Instance()
        if self.p4i:
            logger.debug('-- Entered p4RevertChangelist --')
            try:
                self.p4i.run('revert', "-c%s" % changelist, '//...')
                logger.info("***Reverting: '%s'***" % self.fileName)
                return 1
            except:
                return 0
            logger.debug('-- Exiting p4RevertChangelist --')
        else:
            logger.error('Could not create P4 instance')
            return 0
Ejemplo n.º 17
0
    def p4DeleteChangelist(self, changelist, enforceEmpty=1):

        if not self.p4i:
            self.createP4Instance()
        if self.p4i:
            logger.debug('-- Entered p4DeleteChangelist --')
            try:
                self.p4i.run('change', "-d", int(changelist))
                logger.info("***Deleting changelist: '%s'***" % changelist)
                return 1
            except:
                return 0
            logger.debug('-- Exiting p4DeleteChangelist --')
        else:
            logger.error('Could not create P4 instance')
            return 0
Ejemplo n.º 18
0
	def p4RevertFile(self):
		
		if not self.p4i: self.createP4Instance()
		if self.p4i:
			logger.debug('-- Entered p4Revert --')
			try:
#				self.p4i.run('revert', "%s" % self.fileName)
				self.p4i.run('revert', "%s" % self.depotPath)
				logger.info("***Reverting: '%s'***" % self.fileName)
				return 1
			except:
				return 0
			logger.debug('-- Exiting p4Revert --')
		else:
			logger.error('Could not create P4 instance')
			return 0
Ejemplo n.º 19
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')
Ejemplo n.º 20
0
	def p4GetFileType(self):
		"""
		SYNOPSIS: fstat info about the file
		INPUTS:	NONE
		RETURNS: True/False
		Example: mP4.p4GetFileType()
		"""	
		if not self.p4i: self.createP4Instance()
		if self.p4i:
			logger.debug('-- Entered p4GetFileType --')
			if self.isInP4:
				result = self.p4i.run("fstat", self.depotPath)
				logger.debug('-- Exiting p4GetFileType --')
				return result[0]['headType']
			else: return 0
		else:
			logger.error('Could not create P4 instance')
Ejemplo n.º 21
0
    def p4RevertFile(self):

        if not self.p4i:
            self.createP4Instance()
        if self.p4i:
            logger.debug('-- Entered p4Revert --')
            try:
                #				self.p4i.run('revert', "%s" % self.fileName)
                self.p4i.run('revert', "%s" % self.depotPath)
                logger.info("***Reverting: '%s'***" % self.fileName)
                return 1
            except:
                return 0
            logger.debug('-- Exiting p4Revert --')
        else:
            logger.error('Could not create P4 instance')
            return 0
Ejemplo n.º 22
0
	def p4SetFileType(self, fileType='binary'):
		"""
		SYNOPSIS: Set file type
		INPUTS:	fileType - 
		RETURNS: Nothing
		Example: mP4.p4SetFileType()
		"""
		if not self.p4i: self.createP4Instance()
		if self.p4i:
			logger.debug('-- Entered p4SetFileType --')
			if self.isInP4:
				self.p4i.run("reopen", "-t%s" % fileType, self.depotPath)
#				result = self.p4i.run("fstat", self.depotPath)
				logger.debug('-- Exiting p4SetFileType --')
				return 1
#				return result[0]['headType']
			else: return 0
		else:
			logger.error('Could not create P4 instance')
Ejemplo n.º 23
0
    def p4Sync(self, force=0):
        """
        SYNOPSIS: Sync file
        INPUTS:	force* - Force sync (0/1)
        RETURNS: True/False/-1
        Example: mP4.p4Sync()
        """
        if not self.p4i:
            self.createP4Instance()
        if self.p4i:
            if not self.isP4Connected:
                if self.canP4connect:
                    self.p4Connect()
            logger.debug('-- Entered p4Sync --')
            #	depotPath = depotPath.replace('\\', '/')
            # test to see whether its a file or a dir
            #			if self.depotPath[-1:] == '/': self.depotPath = self.depotPath[:-1]
            if pcsPath.Path(self._fileName).isdir():
                self.depotPath = self.depotPath + '...'
                logger.debug('Depot Path is: %s' % self.depotPath)

            if self.isInP4:
                if not self.isLatest:
                    result = 0
                    try:
                        if force:
                            result = self.p4i.run("sync", "-f", self.depotPath)
                            logger.debug("***Syncing (force): '%s'***" %
                                         self.depotPath)
                        else:
                            result = self.p4i.run("sync", self.depotPath)
                            logger.debug("***Syncing: '%s'***" %
                                         self.depotPath)
                            #if result: result = 1
                    except:
                        logger.debug("Failed to sync. Already in sync?...")
                        result = 0
                    logger.debug('-- Exiting p4Sync --')
                    return result
                else:
                    return True
        else:
            logger.error('Could not create P4 instance')
Ejemplo n.º 24
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
Ejemplo n.º 25
0
 def p4GetFileType(self):
     """
     SYNOPSIS: fstat info about the file
     INPUTS:	NONE
     RETURNS: True/False
     Example: mP4.p4GetFileType()
     """
     if not self.p4i:
         self.createP4Instance()
     if self.p4i:
         logger.debug('-- Entered p4GetFileType --')
         if self.isInP4:
             result = self.p4i.run("fstat", self.depotPath)
             logger.debug('-- Exiting p4GetFileType --')
             return result[0]['headType']
         else:
             return 0
     else:
         logger.error('Could not create P4 instance')
Ejemplo n.º 26
0
    def p4clientDiag(self):
        """
        SYNOPSIS: Diagnose specs about P4 client
        INPUTS:	NONE
        RETURNS: clientName
        Example: mP4.p4clientDiag
        """
        if not self.p4i:
            self.createP4Instance()
        if self.p4i:
            logger.debug('-- Entered p4clientDiag --')
            infoL = self.p4i.run("info")
            #print "infoL is: '%s'" %infoL
            info = infoL[0]

            j = 0
            clientName = 0
            # perforce diagnostics
            if self.p4Version == 2.4:
                # list = P4 for Python 2.4
                logger.debug("Client 'info' specs are:\n%s" %
                             '\n'.join(i for i in infoL))
                for i in infoL:
                    if not i.find("Client unknown") == -1:
                        clientName = '*unknown*'
                    elif not i.find("Client name") == -1:
                        clientName = i[i.rfind(' ') + 1:]
            elif self.p4Version == 2.5 or 2.6:
                logger.debug("Client 'info' specs are:\n%s" %
                             '\n'.join('%s is: %s' % (stat, val)
                                       for stat, val in info.iteritems()))
                keys = info.keys()  #@UnusedVariable
                for i in info:
                    j = j + 1
                    clientName = info['clientName']

            logger.debug('returning %s' % clientName)
            logger.debug('-- Exiting p4clientDiag --')
            return clientName
        else:
            logger.error('Could not create P4 instance')
            return 0
Ejemplo n.º 27
0
 def isLatest(self):
     """
     **Property, do not use ()**
     SYNOPSIS: Check if file is latest
     INPUTS NONE
     RETURNS: True/False
     Example: mP4.isLatest
     """
     if not self.p4i:
         self.createP4Instance()
     if self.p4i:
         logger.debug('-- Entered isLatest --')
         if self.isInP4:
             try:
                 if not pcsPath.Path(self._fileName).isdir():
                     fileStatDict = self.p4i.run("fstat", self.depotPath)
                     if fileStatDict:
                         if fileStatDict[0]['headRev'] == fileStatDict[0]['haveRev']:
                             logger.debug('Head revision - %s - same as Have Revision - %s - on file file - %s' % (
                                 str(fileStatDict[0]['headRev']), str(fileStatDict[0]['haveRev']), self.depotPath))
                             return 1
                         else:
                             logger.debug(
                                 'Head revision - %s - not the same as Have Revision - %s - on file file - %s' % (
                                     str(fileStatDict[0]['headRev']), str(fileStatDict[0]['haveRev']),
                                     self.depotPath))
                             return 0
                     else:
                         logger.debug('Empty fstat list returned on file - %s' % self.depotPath)
                         return 0
                 else:
                     logger.debug('Passed file is a directory - %s' % self.depotPath)
                     return 0
             except:
                 logger.debug('Failed on file - %s' % self.depotPath)
                 return 0
         else:
             logger.debug('File not in perforce - %s' % self.depotPath)
             return 0
     else:
         logger.error('Could not create P4 instance')
     logger.debug('- Exiting isLatest --')
Ejemplo n.º 28
0
    def p4Sync(self, force=0):
        """
        SYNOPSIS: Sync file
        INPUTS:	force* - Force sync (0/1)
        RETURNS: True/False/-1
        Example: mP4.p4Sync()
        """
        if not self.p4i:
            self.createP4Instance()
        if self.p4i:
            if not self.isP4Connected:
                if self.canP4connect:
                    self.p4Connect()
            logger.debug('-- Entered p4Sync --')
            #	depotPath = depotPath.replace('\\', '/')
            # test to see whether its a file or a dir
            #			if self.depotPath[-1:] == '/': self.depotPath = self.depotPath[:-1]
            if pcsPath.Path(self._fileName).isdir():
                self.depotPath = self.depotPath + '...'
                logger.debug('Depot Path is: %s' % self.depotPath)

            if self.isInP4:
                if not self.isLatest:
                    result = 0
                    try:
                        if force:
                            result = self.p4i.run("sync", "-f", self.depotPath)
                            logger.debug("***Syncing (force): '%s'***" % self.depotPath)
                        else:
                            result = self.p4i.run("sync", self.depotPath)
                            logger.debug("***Syncing: '%s'***" % self.depotPath)
                            #if result: result = 1
                    except:
                        logger.debug("Failed to sync. Already in sync?...")
                        result = 0
                    logger.debug('-- Exiting p4Sync --')
                    return result
                else:
                    return True
        else:
            logger.error('Could not create P4 instance')
Ejemplo n.º 29
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
Ejemplo n.º 30
0
 def p4SetFileType(self, fileType='binary'):
     """
     SYNOPSIS: Set file type
     INPUTS:	fileType -
     RETURNS: Nothing
     Example: mP4.p4SetFileType()
     """
     if not self.p4i:
         self.createP4Instance()
     if self.p4i:
         logger.debug('-- Entered p4SetFileType --')
         if self.isInP4:
             self.p4i.run("reopen", "-t%s" % fileType, self.depotPath)
             #				result = self.p4i.run("fstat", self.depotPath)
             logger.debug('-- Exiting p4SetFileType --')
             return 1
         #				return result[0]['headType']
         else:
             return 0
     else:
         logger.error('Could not create P4 instance')
Ejemplo n.º 31
0
    def p4clientDiag(self):
        """
        SYNOPSIS: Diagnose specs about P4 client
        INPUTS:	NONE
        RETURNS: clientName
        Example: mP4.p4clientDiag
        """
        if not self.p4i:
            self.createP4Instance()
        if self.p4i:
            logger.debug('-- Entered p4clientDiag --')
            infoL = self.p4i.run("info")
            #print "infoL is: '%s'" %infoL
            info = infoL[0]

            j = 0
            clientName = 0
            # perforce diagnostics
            if self.p4Version == 2.4:
                # list = P4 for Python 2.4
                logger.debug("Client 'info' specs are:\n%s" % '\n'.join(i for i in infoL))
                for i in infoL:
                    if not i.find("Client unknown") == -1:
                        clientName = '*unknown*'
                    elif not i.find("Client name") == -1:
                        clientName = i[i.rfind(' ') + 1:]
            elif self.p4Version == 2.5 or 2.6:
                logger.debug("Client 'info' specs are:\n%s" % '\n'.join(
                    '%s is: %s' % (stat, val) for stat, val in info.iteritems()))
                keys = info.keys() #@UnusedVariable
                for i in info:
                    j = j + 1
                    clientName = info['clientName']

            logger.debug('returning %s' % clientName)
            logger.debug('-- Exiting p4clientDiag --')
            return clientName
        else:
            logger.error('Could not create P4 instance')
            return 0
Ejemplo n.º 32
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')
Ejemplo n.º 33
0
    def isCheckedOut(self):
        """
        **Property, do not use ()**
        SYNOPSIS: Check if file is checked out
        INPUTS NONE
        RETURNS: True/False
        Example: mP4.isCheckedOut
        """
        if not self.p4i:
            self.createP4Instance()
        if self.p4i:
            logger.debug('-- Entered isCheckedOut --')
            checkedOut = 0
            if self.isInP4:
                logger.debug('%s is in depot' % self.depotPath)
                stats = self.p4i.run("opened", "-a", self._fileName)
                if stats:
                    if self.p4Version == 2.4:
                        logger.debug('p4(Python2.4) stats are:%s' % stats)
                        if not stats[0].find(' by ') == -1:
                            checkedOut = stats[0][stats[0].rfind(' ') + 1:]
                    elif self.p4Version == 2.5 or 2.6:
                        logger.debug('P4(Python2.5) stats are:\n%s' %
                                     '\n'.join('%s,%s' % (stat, stats[0][stat])
                                               for stat in stats[0].keys()))

                        if stats[0].has_key('user'):
                            logger.debug('Already checked out by: %s' %
                                         stats[0]['user'])
                            checkedOut = stats[0]['user']
                logger.debug('Not checked out.')

            logger.debug('-- Exiting isCheckedOut --')
            return checkedOut
        else:
            logger.error('Could not create P4 instance')
            return 0
Ejemplo n.º 34
0
    def pushToNetwork(self, networkLoc=gv.toolsLocation, remote=True):
        """ copies all files from depot to desired
			network test location
			Params:
				networkLoc: destination location
			Returns: True/False?
		"""

        _pNetworkLoc = Path(networkLoc)
        result = True

        # copy to remote build location, straight-up delete and copy all
        if remote:

            # try whole loop 5 times?
            for unused in range(4):
                if _pNetworkLoc.exists():
                    # nuke current folders
                    print "Cleaning old: %s/." % _pNetworkLoc
                    for _dir in _pNetworkLoc.dirs():
                        # make writable
                        for _file in _dir.walk():
                            _file.makeWritable()

                            # try /python twice
                        if "python" in _dir:
                            try:
                                _dir.rmtree()
                                print "Removing dir: %s" % _dir
                            except WindowsError:
                                print "Failed once on '%s', trying again . . ." % _dir

                        if _dir.exists():
                            try:
                                _dir.rmtree()
                                print "Removing dir: %s" % _dir
                            except WindowsError:
                                print "Unable to delete dir: '%s'" % _dir
                                raise
                                # remote top dir too
                    _pNetworkLoc.rmtree()

                    # copy to network
            print "Copying '%s' dir to '%s'" % (self.pipelineSourceLocation, _pNetworkLoc)
            try:
                Path(self.pipelineSourceLocation).copytree(_pNetworkLoc)
            except WindowsError:
                print "Process locked trying to copy to: '%s'. Please just run again." % _pNetworkLoc
                raise
            except shutil.Error as e:
                print "Permission denied for file/folder: '%s'" % e[0]

                # success?
            if not _pNetworkLoc.exists():
                logger.error("Failed to copy to remote location build: '%s'" % _pNetworkLoc)

                # copy/move dataResources sub-folder
            for _dir in Path("%s/dataResources" % _pNetworkLoc).dirs():
                if _dir.namebase == "installData":
                    Path(_dir).move(_pNetworkLoc)

                    # have to dance around data and installData dirs
        else:
            if _pNetworkLoc.exists():
                # nuke current folders
                print "Cleaning old: %s/." % _pNetworkLoc
                for _dir in _pNetworkLoc.dirs():
                    if "data" not in _dir:  # keep 'data' & 'installData'!
                        # make writable
                        for _file in _dir.walk():
                            _file.makeWritable()

                            # try /python twice
                        if "python" in _dir:
                            try:
                                _dir.rmtree()
                            except WindowsError:
                                print "Failed once on '%s', trying again . . ." % _dir

                        if _dir.exists():
                            try:
                                _dir.rmtree()
                                print "Removing dir: %s" % _dir
                            except WindowsError:
                                print "Unable to delete dir: '%s'" % _dir
                                raise

                                # clean dataResources
                    elif _dir == "dataResources":
                        # make writable
                        for _file in _dir.walk():
                            _file.makeWritable()
                        print "Removing dir: %s" % _dir
                        _dir.rmtree()

                        # copy to network
            tempNetworkLoc = Path("%s/temp" % _pNetworkLoc)

            # copy
            print "Copying '%s' dir to '%s'" % (self.pipelineSourceLocation, tempNetworkLoc)
            try:
                Path(self.pipelineSourceLocation).copytree(tempNetworkLoc)
            except WindowsError:
                print "Process locked trying to copy to: '%s'. Please just run again." % tempNetworkLoc
            except shutil.Error as e:
                print "Permission denied for file/folder: '%s'" % e[0]

                # move first-layer sub-dirs from '/temp' up to parent
            for _dir in tempNetworkLoc.dirs():
                try:
                    if "data" not in _dir:  # skip 'data' & 'installData'!
                        Path(_dir).move(_pNetworkLoc)
                except WindowsError:
                    print "failed on: " + _dir
                except shutil.Error:
                    print "failed to copy from dir: '%s', already exists?" % _dir
                    raise

                    # nuke tempNetworkLoc
            if tempNetworkLoc.exists():
                print "Cleaning old: %s" % tempNetworkLoc
                # make writable
                for _file in tempNetworkLoc.walk():
                    _file.makeWritable()
                print "Removing tree: %s" % tempNetworkLoc
                tempNetworkLoc.rmtree()

                ############# start cleaning ##############

                # clean un-needed root folders
        unNeededRoot = ["dataResources", "docs", "logs"]
        for unNeeded in unNeededRoot:
            print "Cleaning un-needed: %s/%s" % (_pNetworkLoc, unNeeded)
            for _dir in Path(_pNetworkLoc).dirs():
                if _dir.namebase == unNeeded:
                    # make writable
                    for _file in _dir.walk():
                        _file.makeWritable()
                    print "Removing dir: %s" % _dir
                    _dir.rmtree()

                    # clean unitTests
        print "Cleaning un-needed: %s/python/unitTests" % _pNetworkLoc
        for _dir in Path("%s/python" % _pNetworkLoc).dirs():
            if _dir.namebase == "unitTests":
                # make writable
                for _file in _dir.walk():
                    _file.makeWritable()
                print "Removing dir: %s" % _dir
                _dir.rmtree()

                # clean non-maya/pymel dirs from pymels
        print "Cleaning un-needed: %s/python/maya/pymel" % _pNetworkLoc
        pyMelDirs = ["pymel-1.0.2", "pymel-1.0.3"]
        for pyMelDir in pyMelDirs:
            if not Path("%s/python/maya/%s" % (_pNetworkLoc, pyMelDir)).exists():
                logger.error("No pymel dir found, probably failed copy earlier.")
                if not _dir.namebase == "maya" and not _dir.namebase == "pymel":
                    # make writable
                    for _file in _dir.walk():
                        _file.makeWritable()
                    print "Removing dir: %s" % _dir
                    _dir.rmtree()
                for _file in Path("%s/python/maya/%s" % (_pNetworkLoc, pyMelDir)).files():
                    _file.makeWritable()
                    print "Removing file: %s" % _file
                    _file.remove()

                    # clean apps
        print "Cleaning un-needed: %s/python/apps" % _pNetworkLoc
        for _dir in Path("%s/python/apps" % _pNetworkLoc).dirs():
            if not _dir.namebase == "APE":
                # make writable
                for _file in _dir.walk():
                    _file.makeWritable()
                print "Removing dir: %s" % _dir
                _dir.rmtree()

                # clean misc
        print "Cleaning un-needed project files in : %s" % _pNetworkLoc
        unNeededRoot = [".project", ".pydevproject", "artMonkey.wpr", "artMonkey.wpu"]
        for unNeeded in unNeededRoot:
            for _file in _pNetworkLoc.files():
                if _file.basename() == unNeeded:
                    # make writable
                    _file.makeWritable()
                    print "Removing file: %s" % _file
                    _file.remove()

        print "**********************************"
        print "Push To Network complete."
        print "**********************************"
        logger.info("**********************************")
        logger.info("Push To Network complete.")
        logger.info("**********************************")

        return result
    def pushToNetwork(self, networkLoc=gv.toolsLocation, remote=True):
        ''' copies all files from depot to desired
			network test location
			Params:
				networkLoc: destination location
			Returns: True/False?
		'''

        _pNetworkLoc = Path(networkLoc)
        result = True

        # copy to remote build location, straight-up delete and copy all
        if remote:

            # try whole loop 5 times?
            for unused in range(4):
                if _pNetworkLoc.exists():
                    # nuke current folders
                    print "Cleaning old: %s/." % _pNetworkLoc
                    for _dir in _pNetworkLoc.dirs():
                        # make writable
                        for _file in _dir.walk():
                            _file.makeWritable()

                        # try /python twice
                        if 'python' in _dir:
                            try:
                                _dir.rmtree()
                                print "Removing dir: %s" % _dir
                            except WindowsError:
                                print "Failed once on '%s', trying again . . ." % _dir

                        if _dir.exists():
                            try:
                                _dir.rmtree()
                                print "Removing dir: %s" % _dir
                            except WindowsError:
                                print "Unable to delete dir: '%s'" % _dir
                                raise
                    # remote top dir too
                    _pNetworkLoc.rmtree()

            # copy to network
            print "Copying '%s' dir to '%s'" % (self.pipelineSourceLocation,
                                                _pNetworkLoc)
            try:
                Path(self.pipelineSourceLocation).copytree(_pNetworkLoc)
            except WindowsError:
                print "Process locked trying to copy to: '%s'. Please just run again." % _pNetworkLoc
                raise
            except shutil.Error as e:
                print "Permission denied for file/folder: '%s'" % e[0]

            # success?
            if not _pNetworkLoc.exists():
                logger.error("Failed to copy to remote location build: '%s'" %
                             _pNetworkLoc)

            # copy/move dataResources sub-folder
            for _dir in Path('%s/dataResources' % _pNetworkLoc).dirs():
                if _dir.namebase == 'installData':
                    Path(_dir).move(_pNetworkLoc)

        # have to dance around data and installData dirs
        else:
            if _pNetworkLoc.exists():
                # nuke current folders
                print "Cleaning old: %s/." % _pNetworkLoc
                for _dir in _pNetworkLoc.dirs():
                    if "data" not in _dir:  #keep 'data' & 'installData'!
                        # make writable
                        for _file in _dir.walk():
                            _file.makeWritable()

                        # try /python twice
                        if 'python' in _dir:
                            try:
                                _dir.rmtree()
                            except WindowsError:
                                print "Failed once on '%s', trying again . . ." % _dir

                        if _dir.exists():
                            try:
                                _dir.rmtree()
                                print "Removing dir: %s" % _dir
                            except WindowsError:
                                print "Unable to delete dir: '%s'" % _dir
                                raise

                    # clean dataResources
                    elif _dir == 'dataResources':
                        # make writable
                        for _file in _dir.walk():
                            _file.makeWritable()
                        print "Removing dir: %s" % _dir
                        _dir.rmtree()

            # copy to network
            tempNetworkLoc = Path('%s/temp' % _pNetworkLoc)

            # copy
            print "Copying '%s' dir to '%s'" % (self.pipelineSourceLocation,
                                                tempNetworkLoc)
            try:
                Path(self.pipelineSourceLocation).copytree(tempNetworkLoc)
            except WindowsError:
                print "Process locked trying to copy to: '%s'. Please just run again." % tempNetworkLoc
            except shutil.Error as e:
                print "Permission denied for file/folder: '%s'" % e[0]

            # move first-layer sub-dirs from '/temp' up to parent
            for _dir in tempNetworkLoc.dirs():
                try:
                    if "data" not in _dir:  #skip 'data' & 'installData'!
                        Path(_dir).move(_pNetworkLoc)
                except WindowsError:
                    print "failed on: " + _dir
                except shutil.Error:
                    print "failed to copy from dir: '%s', already exists?" % _dir
                    raise

            # nuke tempNetworkLoc
            if tempNetworkLoc.exists():
                print "Cleaning old: %s" % tempNetworkLoc
                # make writable
                for _file in tempNetworkLoc.walk():
                    _file.makeWritable()
                print "Removing tree: %s" % tempNetworkLoc
                tempNetworkLoc.rmtree()

        ############# start cleaning ##############

        # clean un-needed root folders
        unNeededRoot = ['dataResources', 'docs', 'logs']
        for unNeeded in unNeededRoot:
            print "Cleaning un-needed: %s/%s" % (_pNetworkLoc, unNeeded)
            for _dir in Path(_pNetworkLoc).dirs():
                if _dir.namebase == unNeeded:
                    # make writable
                    for _file in _dir.walk():
                        _file.makeWritable()
                    print "Removing dir: %s" % _dir
                    _dir.rmtree()

        # clean unitTests
        print "Cleaning un-needed: %s/python/unitTests" % _pNetworkLoc
        for _dir in Path('%s/python' % _pNetworkLoc).dirs():
            if _dir.namebase == 'unitTests':
                # make writable
                for _file in _dir.walk():
                    _file.makeWritable()
                print "Removing dir: %s" % _dir
                _dir.rmtree()

        # clean non-maya/pymel dirs from pymels
        print "Cleaning un-needed: %s/python/maya/pymel" % _pNetworkLoc
        pyMelDirs = ['pymel-1.0.2', 'pymel-1.0.3']
        for pyMelDir in pyMelDirs:
            if not Path('%s/python/maya/%s' %
                        (_pNetworkLoc, pyMelDir)).exists():
                logger.error(
                    "No pymel dir found, probably failed copy earlier.")
                if not _dir.namebase == 'maya' and not _dir.namebase == 'pymel':
                    # make writable
                    for _file in _dir.walk():
                        _file.makeWritable()
                    print "Removing dir: %s" % _dir
                    _dir.rmtree()
                for _file in Path('%s/python/maya/%s' %
                                  (_pNetworkLoc, pyMelDir)).files():
                    _file.makeWritable()
                    print "Removing file: %s" % _file
                    _file.remove()

        # clean apps
        print "Cleaning un-needed: %s/python/apps" % _pNetworkLoc
        for _dir in Path('%s/python/apps' % _pNetworkLoc).dirs():
            if not _dir.namebase == 'APE':
                # make writable
                for _file in _dir.walk():
                    _file.makeWritable()
                print "Removing dir: %s" % _dir
                _dir.rmtree()

        # clean misc
        print "Cleaning un-needed project files in : %s" % _pNetworkLoc
        unNeededRoot = [
            '.project', '.pydevproject', 'artMonkey.wpr', 'artMonkey.wpu'
        ]
        for unNeeded in unNeededRoot:
            for _file in _pNetworkLoc.files():
                if _file.basename() == unNeeded:
                    # make writable
                    _file.makeWritable()
                    print "Removing file: %s" % _file
                    _file.remove()

        print "**********************************"
        print "Push To Network complete."
        print "**********************************"
        logger.info("**********************************")
        logger.info("Push To Network complete.")
        logger.info("**********************************")

        return result
Ejemplo n.º 36
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'
            )
Ejemplo n.º 37
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')
Ejemplo n.º 38
0
    def p4DescribeChangeList(self, changeListNum):
        """
        NAME: p4DescribeChangList

        SYNOPSIS
         Queries changeList and returns files and description

        INPUTS	* = optional
         (int)			changListNum:	changeList to lookup

        ##RETURNS: (list),(string)	files, desc
        RETURNS: (string)	description
        """
        if not self.p4i:
            self.createP4Instance()
        if self.p4i:
            logger.debug('-- Entered p4DescribeChangList --')
            description = ''
            try:
                if self.p4Version == 2.4:
                    results = self.p4i.run('describe', '-dc',
                                           str(changeListNum))
                    if not results:
                        logger.info("Changelist %s probably doesn't exist" %
                                    changeListNum)
                        return
                    doneWithDesc, doneWithFiles = [0, 0]
                    desc, files = [[], []]
                    for line in results:
                        if 'Affected files ' in line:
                            doneWithDesc = 1
                        if 'Differences ' in line:
                            doneWithFiles = 1
                        if not doneWithDesc:
                            desc.append(line)
                        elif not doneWithFiles:
                            files.append(line)

                    text = '\nDescription of change:\n\n'
                    for des in desc:
                        if des[:1] == '\t':
                            des = des[1:]  # remove tab
                        text = '%s%s\n' % (text, des)
                    for _file in files:
                        if _file[:2] == '//':
                            _file = _file[:-5]  # remove '#edit'
                        text = '%s%s\n' % (text, _file)
                    description = text
                elif self.p4Version == 2.5 or 2.6:
                    results = self.p4i.run('describe', '-dc', changeListNum)[0]
                    files = results['depotFile']
                    desc = results['desc']
                    #description = [desc, files]
                    filesText = ''
                    for _file in files:
                        filesText = '%s%s\n' % (filesText, _file)
                    description = '\nDescription of change:\n\n%s\n\nAffected files ...\n\n%s\n' % (
                        desc, filesText)
            except:
                logger.info("Changelist %s probably doesn't exist" %
                            changeListNum)
                return

            return description
        else:
            logger.error('Could not create P4 instance')