def clean(self, pNetworkLoc=''):
        _pNetworkLoc = pNetworkLoc

        # clean pymel
        pymel102 = Path('%s/python/maya/pymel-1.0.2' % _pNetworkLoc)
        if pymel102.exists():
            print "Cleaning old: %s/." % _pNetworkLoc
            for _dir in pymel102.dirs():
                # make writable
                for _file in _dir.walk():
                    _file.makeWritable()

                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
            pymel102.rmtree()

        pymel103 = Path('%s/python/maya/pymel-1.0.3' % _pNetworkLoc)

        for _dir in pymel103.dirs():
            if "pymel" not in _dir.basename() and "maya" not in _dir.basename(
            ):  #keep 'pymel' & 'maya'!
                print "Cleaning unneeded: %s/." % _dir
                # make writable
                for _file in _dir.walk():
                    _file.makeWritable()

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

        # make writable
        for _file in pymel103.files():
            _file.makeWritable()
            _file.remove()


#		# clean
#		try:
#			Path('%s/.settings' % self.networkLoc).removedirs() # Fails. Read-Only?
#		except WindowsError:
#			print "Failed to remove %s/.settings'" % self.networkLoc

        print "**********************************"
        print "cleaning of '%s' complete." % _pNetworkLoc
        print "**********************************"
        logger.info("**********************************")
        logger.info("cleaning of '%s' complete." % _pNetworkLoc)
        logger.info("**********************************")
Ejemplo n.º 2
0
    def clean(self, pNetworkLoc=""):
        _pNetworkLoc = pNetworkLoc

        # clean pymel
        pymel102 = Path("%s/python/maya/pymel-1.0.2" % _pNetworkLoc)
        if pymel102.exists():
            print "Cleaning old: %s/." % _pNetworkLoc
            for _dir in pymel102.dirs():
                # make writable
                for _file in _dir.walk():
                    _file.makeWritable()

                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
            pymel102.rmtree()

        pymel103 = Path("%s/python/maya/pymel-1.0.3" % _pNetworkLoc)

        for _dir in pymel103.dirs():
            if "pymel" not in _dir.basename() and "maya" not in _dir.basename():  # keep 'pymel' & 'maya'!
                print "Cleaning unneeded: %s/." % _dir
                # make writable
                for _file in _dir.walk():
                    _file.makeWritable()

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

                        # make writable
        for _file in pymel103.files():
            _file.makeWritable()
            _file.remove()

        # 		# clean
        # 		try:
        # 			Path('%s/.settings' % self.networkLoc).removedirs() # Fails. Read-Only?
        # 		except WindowsError:
        # 			print "Failed to remove %s/.settings'" % self.networkLoc

        print "**********************************"
        print "cleaning of '%s' complete." % _pNetworkLoc
        print "**********************************"
        logger.info("**********************************")
        logger.info("cleaning of '%s' complete." % _pNetworkLoc)
        logger.info("**********************************")
Ejemplo n.º 3
0
    def buildPCSPipeline(self, compileInstaller=False, pyc=True, removePY=True, removePYC=True):
        """ main pipeline build and push process
			Params: 
				compileInstaller: try to compile APEinstaller.exe
				pyc: create .pyc files in source first
				removePY: remove .py files on network build location
				removePYC: remove local .pyc files in source
			Returns: True/False
		"""
        completeSuccess = True

        # TODO: run unitTself.pipeBuildself.pipeBuildself.pipeBuildests

        # 		# hack gVarInit
        # 		self.swapGVarInit(direction='REMOTE')
        #
        # 		#TODO: Compile APE
        # 		self.compileAPE()
        #
        # 		# swap back
        # 		self.p4.p4RevertFile()
        ##		self.swapGVarInit(direction='PCS')

        # create pyc
        if pyc:
            if not self.createPYCfiles(self.pipelineSourceLocation):
                completeSuccess = False

                # copy to network
        if self.remoteBuild:
            # build for remote delivery
            if not self.pushToNetwork(self.buildDest, remote=True):
                completeSuccess = False
            if removePY:
                if not _KEEP_NETWORK_PY:
                    if not self.removePYfiles(pathToScrape=self.buildDest):
                        completeSuccess = False

                        # make Mobu/Maya startup files writable
            for pyFile in Path(self.buildDest).walkfiles("*py"):
                if "pcsGlobalSetup.py" in pyFile or "gVarInit.py" in pyFile or "sysGlobalMenu.py" in pyFile:
                    # make non-readOnly
                    pyFile.makeWritable()

                    # make PCSstudio.xml writable too
            pcsStudioXML = Path("%s/installData/PCSstudio.xml" % self.buildDest)
            if pcsStudioXML.exists():
                pcsStudioXML.makeWritable(_dir=False)

                # clean
            self.clean(self.buildDest)

        else:
            # push to local network
            if not self.pushToNetwork(self.networkLoc, remote=False):
                completeSuccess = False

            if removePY:
                if not _KEEP_NETWORK_PY:
                    if not self.removePYfiles(pathToScrape=self.networkLoc):
                        completeSuccess = False

        if removePYC:
            if not self.removePYfiles(pathToScrape=self.pipelineSourceLocation, optionalExt=".pyc"):
                completeSuccess = False

                # provide reminder
        print "Remember to remove unneeded:\n./schemas/.\n\nand change:\n./installData/PCSstudio.xml\n./python/maya/maya/sysGlobalMenu.py\n./python/moBu/startup/pcsGlobalSetup.py\n./python/common/core/gVarInit.py"

        # TODO: email T.A.

        print "********************************************"
        print "*** Build complete."
        print "********************************************"
        logger.info("********************************************")
        logger.info("*** Build complete.")
        logger.info("********************************************")

        return completeSuccess
Ejemplo n.º 4
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 buildPCSPipeline(self,
                         compileInstaller=False,
                         pyc=True,
                         removePY=True,
                         removePYC=True):
        ''' main pipeline build and push process
			Params: 
				compileInstaller: try to compile APEinstaller.exe
				pyc: create .pyc files in source first
				removePY: remove .py files on network build location
				removePYC: remove local .pyc files in source
			Returns: True/False
		'''
        completeSuccess = True

        #TODO: run unitTself.pipeBuildself.pipeBuildself.pipeBuildests

        #		# hack gVarInit
        #		self.swapGVarInit(direction='REMOTE')
        #
        #		#TODO: Compile APE
        #		self.compileAPE()
        #
        #		# swap back
        #		self.p4.p4RevertFile()
        ##		self.swapGVarInit(direction='PCS')

        # create pyc
        if pyc:
            if not self.createPYCfiles(self.pipelineSourceLocation):
                completeSuccess = False

        # copy to network
        if self.remoteBuild:
            # build for remote delivery
            if not self.pushToNetwork(self.buildDest, remote=True):
                completeSuccess = False
            if removePY:
                if not _KEEP_NETWORK_PY:
                    if not self.removePYfiles(pathToScrape=self.buildDest):
                        completeSuccess = False

            # make Mobu/Maya startup files writable
            for pyFile in Path(self.buildDest).walkfiles('*py'):
                if "pcsGlobalSetup.py" in pyFile or "gVarInit.py" in pyFile or "sysGlobalMenu.py" in pyFile:
                    # make non-readOnly
                    pyFile.makeWritable()

            # make PCSstudio.xml writable too
            pcsStudioXML = Path('%s/installData/PCSstudio.xml' %
                                self.buildDest)
            if pcsStudioXML.exists():
                pcsStudioXML.makeWritable(_dir=False)

            # clean
            self.clean(self.buildDest)

        else:
            # push to local network
            if not self.pushToNetwork(self.networkLoc, remote=False):
                completeSuccess = False

            if removePY:
                if not _KEEP_NETWORK_PY:
                    if not self.removePYfiles(pathToScrape=self.networkLoc):
                        completeSuccess = False

        if removePYC:
            if not self.removePYfiles(pathToScrape=self.pipelineSourceLocation,
                                      optionalExt='.pyc'):
                completeSuccess = False

        # provide reminder
        print "Remember to remove unneeded:\n./schemas/.\n\nand change:\n./installData/PCSstudio.xml\n./python/maya/maya/sysGlobalMenu.py\n./python/moBu/startup/pcsGlobalSetup.py\n./python/common/core/gVarInit.py"

        #TODO: email T.A.

        print "********************************************"
        print "*** Build complete."
        print "********************************************"
        logger.info("********************************************")
        logger.info("*** Build complete.")
        logger.info("********************************************")

        return completeSuccess
    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