Beispiel #1
0
 def add_release(self):
     msg = purple('Relase %s not found in package %s (%s project). ' % (self.release, self.package, self.project))
     msg += purple('Shall we add it the release %s release in %s package' % (self.release, self.package))
     if self.ask(msg):
         if self.dry_run:
             print 'Action skipped'
             pass
         else:
             self.server.add_release(self.project, self.package, self.release, 'notes', 'changes')
             print '%s release has been created on the server' % self.release
     else:
         print 'quitting'
         self.server.logout()
Beispiel #2
0
 def add_package(self):
     msg =  purple('Package %s not found in the %s project. ' % (self.package, self.project))
     msg += purple('Shall we add %s package in %s project ? ' % (self.package, self.project))
     if self.ask(msg):
         if self.dry_run:
             print 'Action skipped'
             pass
         else:
             self.server.add_package(self.project, self.package)
             print '%s package has been created on the server' % self.package
     else:
         print 'quitting'
         self.server.logout()
         sys.exit()
Beispiel #3
0
    def remove_file(self, file):
        """returns True if file removed"""
        msg = purple('GforgeUpload -- Removing file: %s will be removed (in %s). Shall we proceed ? ' % (os.path.basename(file), self.get_location()))
        if self.ask(msg):
            if self.dry_run:
                return True

            else:
                self.server.remove_file(self.project, self.package, self.release, os.path.basename(file))
            print '%s removed' % os.path.basename(file)
            return True
        else:
            print '%s not deleted as requested' % file
            return False
Beispiel #4
0
    def add(self):
        """Create the missing elements and upload the files to the server.

        Use the check method to get the different elements exist on the server.
        Create the missing element and upload the files on the server.
        The files are listed in the path directory which is specify with the option ("-d", "--dir")


        >>> python gforge_upload -d /home/user add openalea:VPlants:0.8:*.egg
              Upload the files which exists in /home/user directory to /VPlants package
                                                                     /release 0.8
                                                                     /openalea project
                                                                     /on the gforge server
        """
        print green('Checking and connecting to the forge. Be patient')
        self.check_project()
        self.check_packages()
        self.check_releases()
        self.check_files()

        files = glob.glob(self.glob)
        if len(files)==0:
            print 'No file with glob %s found. Nothing to upload' % (self.glob)
            sys.exit(0)

        print purple('You are about to upload the following files on the gforge (in %s): ' % self.get_location())
        for f in files:	
            print '\t%s' %f

        for file in files:
            if os.path.basename(file) in self.server_files:
                print purple('%s already present on the gforge (in %s). It will therefore be replaced' %(os.path.basename(file), self.get_location()))
                if self.remove_file(file):
                    self.add_file(file)
            else:
                self.add_file(file)
Beispiel #5
0
 def add_file(self, file):
     msg = purple('%s will be added to the gforge (in %s). Shall we proceed ? ' % (os.path.basename(file), self.get_location()))
     f_type = self.file_type(os.path.basename(file))
     p_type = self.proc_type(os.path.basename(file))
     if self.ask(msg):
         if self.dry_run:
             pass
         else:
             if os.path.getsize(file) > 2000000L:
                 self.server.add_big_file(self.project, self.package, self.release, 
                     file, p_type, f_type)
             else:
                 res = self.server.add_file(self.project, self.package, self.release, 
                     file, p_type, f_type)
         print '%s file has been uploaded on the server (in %s)' % (os.path.basename(file), self.get_location())
     else:
         print '%s not uploaded as requested' % file
Beispiel #6
0
    def remove(self):
        """Remove the elements (package/release/and files) on the server.

        Use the check method to get the different elements exist on the server.
        Remove the element listed on the server.

        >>> python gforge_upload remove openalea:VPlants:0.8:*.egg
            Remove all the '.egg' files of /VPlants package
                                           /release 0.8
                                           /openalea project
                                           /on the gforge server

        """
        print 'Checking and connecting to the forge. Be patient'
        self.check_project()
        self.check_packages()
        # if only --package is provided, we assume that the whole package must be deleted included all the files
        # if the --package and --release are provided, we assume that the release of this package must be deleted included the files
        # if the --package and --release and --glob are provided, we assume that files of project/package/release must be deleted
        if self.package and self.glob and self.release:
            self.check_releases()
            files = server.get_files(self.project, self.package, self.release)
            if len(files)==0:
                print 'No file with glob % found. Nothing to upload' % (self.glob)
                sys.exit(0)
            for file in files:
                if fnmatch(file, self.glob):
                    self.remove_file(file)
                else:
                    print '%s does not match the glob option %s. Skipped' % (file, self.glob)


        elif self.package and self.release and not self.glob:
            self.check_releases()
            files = server.get_files(self.project, self.package, self.release)
            print purple('You are about to delete the release %s that contains the following files: ' % self.get_location())
            for f in files:	
                print '\t%s' %f
            if self.ask(purple('Shall we proceed ?')):
                if self.dry_run:
                    pass
                else:
                    self.server.remove_release(self.project, self.package, self.release)
                print 'Release %s deleted' % self.release
            else:
                print 'skipped'

        elif self.package and not self.release and not self.glob:
            releases = server.get_releases(self.project, self.package)
            if len(releases)==0:
                if self.ask(purple('Shall we proceed in deleting empty package %s?' % self.package)):
                    if self.dry_run:
                        pass
                    else:
                        self.server.remove_package(self.project, self.package)
                else:
                    print 'skipped'

            for release in releases:
                files = server.get_files(self.project, self.package, release)
                print purple('You are about to delete the release %s that contains the following files: ' % release)
                for f in files:	
                    print '\t%s' %f

            if self.ask(purple('Shall we proceed ?')):
                if self.dry_run:
                    pass
                else:
                    self.server.remove_package(self.project, self.package)
                    print green('done')
            else:
                print 'skipped'
Beispiel #7
0
    def run(self, color=True):
        """Enter in all package defined and Executing 'python setup.py' with
           user command.

        """
        import sys
        import os
        if color:
            try:
                from openalea.deploy.console import bold, red, green, \
                    color_terminal, nocolor, underline, purple
            except:
                try:
                    sys.path.insert(
                        0, os.path.join('deploy', 'src', 'openalea', 'deploy'))
                    from console import bold, red, green, \
                        color_terminal, nocolor, underline, purple
                except:
                    pass
            if not color_terminal():
                # Windows' poor cmd box doesn't understand ANSI sequences
                nocolor()
        else:
            bold = purple = red = green = underline = str

        print bold("Running multisetup version %s" % __revision__.split()[2])

        project_dir = self.curdir.basename()
        directories = [
            self.curdir.joinpath(package) for package in self.packages
        ]

        print 'Will process the following directories: ',
        for directory in directories:
            print bold(directory.basename()),
        print ''

        try:
            for directory in directories:
                try:
                    os.chdir(directory)
                    print underline('Entering %s package' %
                                    directory.basename())
                except OSError, e:
                    print underline('Entering %s package' %
                                    directory.basename()),
                    print red("cannot find this directory (%s)" %
                              directory.basename())
                    print e

                print 'Python exec : ', sys.executable

                #print underline('Entering %s package' % directory.basename())
                for cmd in self.commands:
                    setup_command = '%s setup.py %s ' % (sys.executable, cmd)
                    print "\tExecuting " + setup_command + '...processing',

                    #Run setup.py with user commands
                    outputs = None
                    errors = None
                    if self.verbose:
                        process = Popen(setup_command, shell=True)
                        status = process.wait()
                    else:
                        process = Popen(setup_command,
                                        stdout=PIPE,
                                        stderr=PIPE,
                                        shell=True)
                        #status = process.wait()
                        outputs, errors = process.communicate()
                    if process.returncode == 0:
                        print green('done')
                    else:
                        if not self.verbose:
                            print red('\tFailed. ( error code %s) ' %
                                      (process.returncode))
                            os.chdir(self.curdir)

                        if not self.force:
                            raise RuntimeError()

                    if 'pylint' in cmd:
                        if outputs is not None:
                            for x in outputs.split('\n'):
                                if x.startswith('Your code has been'):
                                    print purple('\t%s' % x)
                    if 'nosetests' in cmd:
                        if errors is not None:
                            for x in errors.split('\n'):
                                if x.startswith('TOTAL'):
                                    res = x.replace('TOTAL', 'Total coverage')
                                    res = " ".join(res.split())
                                    print purple('\t%s' % res)
                                if x.startswith('Ran'):
                                    print purple('\t%s' % x)
                                if x.startswith('FAILED'):
                                    print purple('\t%s' % x)

        except RuntimeError:
            sys.exit()

        os.chdir(self.curdir)
Beispiel #8
0
    def run(self, color=True):
        """Enter in all package defined and Executing 'python setup.py' with
           user command.

        """
        import sys
        import os
        if color:
            try:
                from openalea.deploy.console import bold, red, green, \
                    color_terminal, nocolor, underline, purple
            except:
                try:
                    sys.path.insert(0, os.path.join('deploy', 'src', 'openalea', 'deploy'))
                    from console import bold, red, green, \
                        color_terminal, nocolor, underline, purple
                except:
                    pass
            if not color_terminal():
                # Windows' poor cmd box doesn't understand ANSI sequences
                nocolor()
        else:
            bold = purple = red = green = underline = str

        print bold("Running multisetup version %s" % __revision__.split()[2])

        project_dir = self.curdir.basename()
        directories = [self.curdir.joinpath(package) for package in self.packages]

        print 'Will process the following directories: ',
        for directory in directories:
            print bold(directory.basename()),
        print ''

        try:
            for directory in directories:
                try:
                    os.chdir(directory)
                    print underline('Entering %s package'
                                    % directory.basename())
                except OSError, e:
                    print underline('Entering %s package'
                                    % directory.basename()),
                    print red("cannot find this directory (%s)"
                              % directory.basename())
                    print e

                print 'Python exec : ', sys.executable

                #print underline('Entering %s package' % directory.basename())
                for cmd in self.commands:
                    setup_command = '%s setup.py %s ' % (sys.executable, cmd)
                    print "\tExecuting " + setup_command + '...processing',

                    #Run setup.py with user commands
                    outputs = None
                    errors = None
                    if self.verbose:
                        process = Popen(setup_command,
                                        shell=True)
                        status = process.wait()
                    else:
                        process = Popen(setup_command, stdout=PIPE, stderr=PIPE,
                                        shell=True)
                        #status = process.wait()
                        outputs, errors = process.communicate()
                    if process.returncode == 0:
                        print green('done')
                    else:
                        if not self.verbose:
                            print red('\tFailed. ( error code %s) ' %
                                  (process.returncode))
                            os.chdir(self.curdir)

                        if not self.force:
                            raise RuntimeError()

                    if 'pylint' in cmd:
                        if outputs is not None:
                            for x in outputs.split('\n'):
                                if x.startswith('Your code has been'):
                                    print purple('\t%s' % x)
                    if 'nosetests' in cmd:
                        if errors is not None:
                            for x in errors.split('\n'):
                                if x.startswith('TOTAL'):
                                    res = x.replace('TOTAL', 'Total coverage')
                                    res = " ".join(res.split())
                                    print purple('\t%s' % res)
                                if x.startswith('Ran'):
                                    print purple('\t%s' % x)
                                if x.startswith('FAILED'):
                                    print purple('\t%s' % x)

        except RuntimeError:
            sys.exit()

        os.chdir(self.curdir)