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
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')
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')
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')
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
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')
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
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')
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' )