Beispiel #1
0
    def install(self):    
        if not os.path.isdir(os.path.join(sublime.packages_path(),"User","MavensMate")):
            os.makedirs(os.path.join(sublime.packages_path(),"User","MavensMate"))

        if os.path.isdir(os.path.join(sublime.packages_path(),"User","MavensMate","mm")):
            platform_util.rmtree(os.path.join(sublime.packages_path(),"User","MavensMate","mm"))

        if self.printer != None:
            self.printer.show()
            self.printer.writeln(' ')
            self.printer.writeln('                                                                          ')
            if self.release != None:
                self.printer.writeln('Installing MavensMate API (mm) '+self.release['tag_name']+' to the User plugin directory.')
            else:
                self.printer.writeln('Installing the MavensMate API (mm) to the User plugin directory.')
            self.printer.writeln('Timestamp: '+self.process_id)
            self.printer.writeln('   Result:           ')

            self.calculate_process_region()
            PanelThreadProgress(self)

        if os.path.isfile(os.path.join(sublime.packages_path(),"User","MavensMate","mm.zip")):
            os.remove(os.path.join(sublime.packages_path(),"User","MavensMate","mm.zip"))

        if self.release == None:
            release_to_install = self.latest_release
        else:
            # installing a specific release
            release_to_install = self.release

        debug(release_to_install)

        file_name_platform_flag = get_platform_flag()
        
        latest_asset = None
        for a in release_to_install['assets']:
            if file_name_platform_flag in a['name']:
                latest_asset = a
        debug('latest asset ---->')
        debug(latest_asset)
        download_url = latest_asset['browser_download_url']
        debug('attempting to download: ',latest_asset['browser_download_url'])

        if 'linux' in sys.platform:
            import subprocess
            zip_name = 'mm.tar.gz'
            command = "wget -O '"+os.path.join(sublime.packages_path(),"User","MavensMate",zip_name)+"' '"+download_url+"'"
            process = subprocess.Popen(command, shell=True,
                stdout=subprocess.PIPE,
                stderr=subprocess.STDOUT)
            download_result = ''
            response_body = ''
            if process.stdout is not None: 
                download_result = process.stdout.readlines()
            elif process.stderr is not None:
                download_result = process.stderr.readlines()
            try:
                response_body = '\n'.join(download_result)
            except:
                strs = []
                for line in download_result:
                    strs.append(line.decode('utf-8'))   
                response_body = '\n'.join(strs)

            debug('result of wget download::: ')
            debug(response_body)
        else:
            zip_name = 'mm.zip'
            with urllib.request.urlopen(download_url) as response, open(os.path.join(sublime.packages_path(),"User","MavensMate",zip_name), 'wb') as out_file:
                data = response.read() # a `bytes` object
                out_file.write(data)

        extract_mm_zip()
        f = open(os.path.join(sublime.packages_path(),"User","MavensMate","mm","version.txt"), 'wb')
        f.write(bytes(release_to_install['tag_name'], 'UTF-8'))
        f.close()

        ensure_executable_perms()

        if os.path.isfile(os.path.join(sublime.packages_path(),"User","MavensMate",zip_name)):
            os.remove(os.path.join(sublime.packages_path(),"User","MavensMate",zip_name))
Beispiel #2
0
    def run(self):
        try:
            debug('mm_installer -->')

            if self.release != None:
                ThreadProgress(self, "Installing MavensMate API (mm) "+self.release['tag_name']+". This could take a few minutes.", '')
            else:
                ThreadProgress(self, "Ensuring MavensMate API (mm) is up to date. This could take a few minutes.", '')

            mm_path = self.settings.get('mm_path', 'default')

            if self.force:
                debug('forcing mm installation')
                self.install()

            elif not os.path.isdir(os.path.join(sublime.packages_path(),"User","MavensMate","mm")) and mm_path == 'default':
                # need to download and install
                debug('user mm_path value is default, but mm not installed, forcing install')
                self.install()

            elif mm_path == 'default' and os.path.isdir(os.path.join(sublime.packages_path(),"User","MavensMate","mm")):
                # check version
                debug('checking for updated mm version')
                
                # here we check for version.txt in the User/mm directory
                try:
                    with open (os.path.join(sublime.packages_path(),"User","MavensMate","mm","version.txt"), "r") as version_file:
                        version_data=version_file.read().replace('\n', '')
                    current_version_data = version_data.replace('v','')

                    installed_version_int = int(float(current_version_data.replace(".", "")))
                except:
                    self.install()
                    self.result = 'Success. Please restart Sublime Text -- Happy coding!!'
                    if self.printer != None:
                        self.calculate_process_region()
                        ThreadTracker.remove(self)
                    return

                # compare local version to server (github release) version
                latest_version = self.latest_release['tag_name'].replace('v','')

                server_version_int = int(float(latest_version.replace(".", "")))

                if server_version_int > installed_version_int:
                    debug('mm is out of date, prompting for an update')
                    #if sublime.ok_cancel_dialog("A new version ("+self.latest_release['tag_name']+") of the MavensMate API (mm) is available, you are running "+version_data+". Would you like to update (recommended)? \n\nIf you no longer wish to see these notifications, toggle mm_check_for_updates to false.\n\nIf you would like MavensMate to automatically install updates to mm, set mm_auto_install_mm_updates to true."):
                    if sublime.ok_cancel_dialog("A new version ("+self.latest_release['tag_name']+") of the MavensMate API (mm) is available, you are running "+version_data+". Would you like to update (recommended)? \n\nIf you no longer wish to see these notifications, toggle mm_check_for_updates to false."):
                        if os.path.isdir(os.path.join(sublime.packages_path(),"User","MavensMate","mm")):
                            platform_util.rmtree(os.path.join(sublime.packages_path(),"User","MavensMate","mm"))

                        self.install()
                else:
                    debug('mm is up to date ('+latest_version+'), no further action needed')
            
            self.result = 'Success. Please restart Sublime Text -- Happy coding!!'
            if self.printer != None:
                self.calculate_process_region()
                ThreadTracker.remove(self)

        except BaseException as e:
            import traceback
            import sys
            traceback.print_exc(file=sys.stdout)            
            debug('[MAVENSMATE] could not install mm')
            debug(e)
            self.result = '[OPERATION FAILED]: could not install mm, please generate/check logs and report GitHub issue'
            if self.printer != None:
                self.calculate_process_region()
                ThreadTracker.remove(self)