コード例 #1
0
 def checkout(self,
              url,
              version=None,
              verbose=False,
              shallow=False,
              timeout=None):
     if url is None or url.strip() == '':
         raise ValueError('Invalid empty url : "%s"' % url)
     # bzr 2.5.1 fails if empty directory exists
     if not ensure_dir_notexists(self.get_path()):
         self.logger.error("Can't remove %s" % self.get_path())
         return False
     cmd = 'bzr branch'
     if version:
         cmd += ' -r %s' % version
     cmd += ' %s %s' % (url, self._path)
     value, _, msg = run_shell_command(cmd,
                                       shell=True,
                                       show_stdout=verbose,
                                       verbose=verbose)
     if value != 0:
         if msg:
             self.logger.error('%s' % msg)
         return False
     return True
コード例 #2
0
 def checkout(self,
              url,
              version='',
              verbose=False,
              shallow=False,
              timeout=None):
     if url is None or url.strip() == '':
         raise ValueError('Invalid empty url : "%s"' % url)
     # Need to check as SVN 1.6.17 writes into directory even if not empty
     if not ensure_dir_notexists(self.get_path()):
         self.logger.error("Can't remove %s" % self.get_path())
         return False
     if version is not None and version != '':
         if not version.startswith("-r"):
             version = "-r%s" % version
     elif version is None:
         version = ''
     cmd = 'svn co %s %s %s' % (sanitized(version), sanitized(url),
                                self._path)
     value, _, msg = run_shell_command(cmd, shell=True, no_filter=True)
     if value != 0:
         if msg:
             self.logger.error('%s' % msg)
         return False
     return True
コード例 #3
0
    def checkout(self, url, version='', verbose=False,
                 shallow=False, timeout=None):
        """
        untars tar at url to self.path.
        If version was given, only the subdirectory 'version' of the
        tar will end up in self.path.  Also creates a file next to the
        checkout named *.tar which is a yaml file listing origin url
        and version arguments.
        """
        if not ensure_dir_notexists(self.get_path()):
            self.logger.error("Can't remove %s" % self.get_path())
            return False
        tempdir = None
        result = False
        try:
            tempdir = tempfile.mkdtemp()
            if os.path.isfile(url):
                filename = url
            else:
                (filename, _) = urlretrieve_netrc(url)
                # print "filename", filename
            temp_tarfile = tarfile.open(filename, 'r:*')
            members = None  # means all members in extractall
            if version == '' or version is None:
                subdir = tempdir
                self.logger.warn("No tar subdirectory chosen via the 'version' argument for url: %s" % url)
            else:
                # getmembers lists all files contained in tar with
                # relative path
                subdirs = []
                members = []
                for m in temp_tarfile.getmembers():
                    if m.name.startswith(version + '/'):
                        members.append(m)
                    if m.name.split('/')[0] not in subdirs:
                        subdirs.append(m.name.split('/')[0])
                if not members:
                    raise VcsError("%s is not a subdirectory with contents in members %s" % (version, subdirs))
                subdir = os.path.join(tempdir, version)
            temp_tarfile.extractall(path=tempdir, members=members)

            if not os.path.isdir(subdir):
                raise VcsError("%s is not a subdirectory\n" % subdir)

            try:
                # os.makedirs(os.path.dirname(self._path))
                shutil.move(subdir, self._path)
            except Exception as ex:
                raise VcsError("%s failed to move %s to %s" % (ex, subdir, self._path))
            metadata = yaml.dump({'url': url, 'version': version})
            with open(self.metadata_path, 'w') as mdat:
                mdat.write(metadata)
            result = True

        except Exception as exc:
            self.logger.error("Tarball download unpack failed: %s" % str(exc))
        finally:
            if tempdir is not None and os.path.exists(tempdir):
                rmtree(tempdir)
        return result
コード例 #4
0
ファイル: tar.py プロジェクト: esteve/vcstools
    def checkout(self, url, version='', verbose=False,
                 shallow=False, timeout=None):
        """
        untars tar at url to self.path.
        If version was given, only the subdirectory 'version' of the
        tar will end up in self.path.  Also creates a file next to the
        checkout named *.tar which is a yaml file listing origin url
        and version arguments.
        """
        if not ensure_dir_notexists(self.get_path()):
            self.logger.error("Can't remove %s" % self.get_path())
            return False
        tempdir = None
        result = False
        try:
            tempdir = tempfile.mkdtemp()
            if os.path.isfile(url):
                filename = url
            else:
                (filename, _) = urlretrieve_netrc(url)
                # print "filename", filename
            temp_tarfile = tarfile.open(filename, 'r:*')
            members = None  # means all members in extractall
            if version == '' or version is None:
                self.logger.warn("No tar subdirectory chosen via the 'version' argument for url: %s" % url)
            else:
                # getmembers lists all files contained in tar with
                # relative path
                subdirs = []
                members = []
                for m in temp_tarfile.getmembers():
                    if m.name.startswith(version + '/'):
                        members.append(m)
                    if m.name.split('/')[0] not in subdirs:
                        subdirs.append(m.name.split('/')[0])
                if not members:
                    raise VcsError("%s is not a subdirectory with contents in members %s" % (version, subdirs))
            temp_tarfile.extractall(path=tempdir, members=members)

            subdir = os.path.join(tempdir, version)
            if not os.path.isdir(subdir):
                raise VcsError("%s is not a subdirectory\n" % subdir)

            try:
                # os.makedirs(os.path.dirname(self._path))
                shutil.move(subdir, self._path)
            except Exception as ex:
                raise VcsError("%s failed to move %s to %s" % (ex, subdir, self._path))
            metadata = yaml.dump({'url': url, 'version': version})
            with open(self.metadata_path, 'w') as mdat:
                mdat.write(metadata)
            result = True

        except Exception as exc:
            self.logger.error("Tarball download unpack failed: %s" % str(exc))
        finally:
            if tempdir is not None and os.path.exists(tempdir):
                shutil.rmtree(tempdir)
        return result
コード例 #5
0
ファイル: bzr.py プロジェクト: k-okada/vcstools
 def checkout(self, url, version=None, verbose=False, shallow=False, timeout=None):
     if url is None or url.strip() == "":
         raise ValueError('Invalid empty url : "%s"' % url)
     # bzr 2.5.1 fails if empty directory exists
     if not ensure_dir_notexists(self.get_path()):
         self.logger.error("Can't remove %s" % self.get_path())
         return False
     cmd = "bzr branch"
     if version:
         cmd += " -r %s" % version
     cmd += " %s %s" % (url, self._path)
     value, _, msg = run_shell_command(cmd, shell=True, show_stdout=verbose, verbose=verbose)
     if value != 0:
         if msg:
             self.logger.error("%s" % msg)
         return False
     return True
コード例 #6
0
ファイル: svn.py プロジェクト: tkruse/vcstools
 def checkout(self, url, version='', verbose=False, shallow=False):
     if url is None or url.strip() == '':
         raise ValueError('Invalid empty url : "%s"' % url)
     # Need to check as SVN 1.6.17 writes into directory even if not empty
     if not ensure_dir_notexists(self.get_path()):
         self.logger.error("Can't remove %s" % self.get_path())
         return False
     if version is not None and version != '':
         if not version.startswith("-r"):
             version = "-r%s" % version
     elif version is None:
         version = ''
     cmd = 'svn co %s %s %s' % (sanitized(version),
                                sanitized(url),
                                self._path)
     value, _, msg = run_shell_command(cmd,
                                       shell=True,
                                       no_filter=True)
     if value != 0:
         if msg:
             self.logger.error('%s' % msg)
         return False
     return True