Example #1
0
 def __init__(self):
     self.is_windows = os.get_os_type() == 'nt'
     if self.is_windows:
         self.poll_object_queue = Queue.Queue()
     import atexit
     atexit.register(self.finalize)
Example #2
0
    def get_repository_info(self):
        my_setup_debug()
        self.p_actualver = os.environ.get('FORCE_PICCOLO_VERSION')
        self.p_minver = (2, 2, 9)
        self.p_minver = (2, 3, 5)  # adds the '-i' flag to rcompare integrated files as needed for review.
        self.p_minver = list(self.p_minver)
        self.p_minver_str = '.'.join(map(str,self.p_minver))
        self.p_bin = self.options.p2_binary or 'p'
        """
        # self.options.debug not populated yet
        if self.options.debug:
            global DEBUG
            DEBUG = True
            .....
        """
        
        if os.environ.get('DISABLE_POSTREVIEWPICCOLOCLIENT'):
            # User requested Piccolo support in postreview be disabled
            logging.debug("piccolo explictly disabled")
            return None
        if self.p_actualver:
            self.p_actualver = map(int, self.p_actualver.split('.'))
        if self.options.p2changenumber or os.environ.get('ENABLE_POSTREVIEWPICCOLOCLIENT'):
            # User requested Piccolo support in postreview be enabled without check
            perform_piccolo_check=False
            logging.debug("not going to perform piccolo check")
        else:
            logging.debug('diff_filename %r', self.options.diff_filename)
            if self.options.diff_filename:
                perform_piccolo_check=False
            else:
                perform_piccolo_check=True
            
        try:
            # Jython only test, consider using a robust check platform module, http://downloads.egenix.com/python/platform.py I think there are others
            os_plat=os.get_os_type()
        except AttributeError:
            os_plat=''
        if sys.platform.startswith('win') or os_plat == 'nt':
            self._command_args = ['cmd', '/C']
        else:
            # probably Unix like...
            self._command_args = ['sh', '-c']

        logging.debug("piccolo bin %r" % self.p_bin)
        if perform_piccolo_check:
            logging.debug("about to check for piccolo")
            if not check_install('%s help' % self.p_bin): # or "p here"? ideally 'p version -c' and then report issues with version (-c option was added to version 2.2.0 of piccolo; p2main.c -> 66 Change 2041 -> 66 (change) on 14-oct-2008 by whiro01)
                # "p version -c" does not require current directory to be in MAPPATH (does not even need MAPPATH set)
                # p help needs mappath (and connection to server)
                logging.debug("piccolo check check_install() failed")
                return None
            # so we have a piccolo command in the path
            if not self.p_actualver:
                # check version of piccolo client .........
                pic_command_str = '%s version -c'  % self.p_bin
                pver_text = execute(self._command_args + [pic_command_str], ignore_errors=True, extra_ignore_errors=(1,))
                logging.info('pver_text %r', pver_text)
                if pver_text.startswith('Invalid option:'):
                    logging.debug("piccolo version check returned Invalid option")
                    # too old, does not support -c
                    print ''
                    print 'Piccolo version too old, (version -c support missing). Need (at least) version %s' % self.p_minver_str
                    return None
                # extract version
                pver_text = pver_text.strip()
                pver_text = pver_text.rsplit(' ', 1)[1]
                pver = pver_text.rsplit('.')
                logging.debug("pver %r" % pver)
                
                #pver = map(int, pver)  # fails if ther are non-integers :-( E.g. 'Piccolo client version 2.2.0b14'
                comparable_pver = []
                for tmp_ver in pver:
                    try:
                        tmp_ver = int(tmp_ver)
                    except ValueError:
                        # probably not an integer, or may be a mix :-(
                        new_tmp_ver = ['0']
                        for tmp_ver_piece in tmp_ver:
                            if tmp_ver_piece in string.digits:
                                new_tmp_ver.append(tmp_ver_piece)
                            else:
                                break
                        tmp_ver = int(''.join(new_tmp_ver))
                    comparable_pver.append(tmp_ver)
                
                self.p_actualver = comparable_pver
                logging.debug("self.p_actualver %r" % self.p_actualver)
                logging.debug("self.p_minver %r" % self.p_minver)
                if self.p_actualver < self.p_minver:
                    print ''
                    print 'Piccolo version too old. Found version %s need version %s' % (pver_text, self.p_minver_str)
                    return None
            
            pic_command_str = '%s here' % self.p_bin
            self._p_here_txt = execute(self._command_args + [pic_command_str], ignore_errors=True, extra_ignore_errors=(1,))
            self._p_here_txt = self._p_here_txt.strip()
            
            # FIXME look at check_gnu_diff() - don't actually need gnu diff under most unix systems BUT do under Windows (mostly likely place for a bad diff exe)
            if sys.platform.startswith('win') or os_plat == 'nt':
                check_gnu_diff()
        else:
            self._p_here_txt = 'EDITME_P2_CLIENT_INFO'  ## TODO do at least minimum hostname and pwd?
        logging.debug('self._p_here_txt %r', self._p_here_txt)
        
        if self.options.submit_as is None:
            self.options.submit_as = os.environ.get('USER')
            if self.options.submit_as and self.options.submit_as.lower() == 'ingres':
                self.options.submit_as = None
        
        #if self.options.username is None:
        #    self.options.username = os.environ.get('USER')
        
        # Ingres Corp only has 1 repository (although there are gateways)
        """
        The Piccolo server (or path) can be obtained with NEWer clients in a very easy fashion:
        
        version 2.2.0 has a neat option:
        
            p map -x
        
        version 2.1.24 does NOT support -x (which restricts to things you have mapped, i.e. can limit the connects) but does support map:
        
            p map
        
        NOTE check version requires Rogers changes.
        
        Can then grep for connect, etc.
        """
        default_piccolo_server = 'usilsuxx:1666'  # and/or pick up from "p map" filtering for connect(s) (shell approach would be; p map |grep '^connect' | awk '{print $4}') if perform_piccolo_check is True
        repository_path = self.options.p2_server or default_piccolo_server # Should try and pick this up from client map, really need a new piccolo command list (first) piccolo server
        
        if self.options.server is None:
            self.options.server = 'http://reviewboard.ingres.prv'  # should consider overridding _get_server_from_config()
        
        return RepositoryInfo(path=repository_path, supports_changesets=False)
Example #3
0
 def __init__(self):
     self.is_windows = os.get_os_type() == 'nt'
     if self.is_windows:
         self.poll_object_queue = Queue.Queue()
     import atexit
     atexit.register(self.finalize)
import os.path
import re
import webbrowser

try:
    import desktopcouch
except ImportError:
    desktopcouch = None


from couchapp.errors import ResourceNotFound, AppError
from couchapp.macros import package_shows, package_views
from couchapp import util

# if os.name == 'nt':
if os.get_os_type() == "nt":

    def _replace_backslash(name):
        return name.replace("\\", "/")


else:

    def _replace_backslash(name):
        return name


logger = logging.getLogger(__name__)


class LocalDoc(object):