示例#1
0
    def upload_conan(self, conan_reference, the_files):
        """
        the_files: dict with relative_path: content
        """
        self.check_credentials()

        # Get the remote snapshot
        remote_snapshot = self._get_conan_snapshot(conan_reference)
        local_snapshot = {
            filename: md5(content)
            for filename, content in the_files.iteritems()
        }

        # Get the diff
        new, modified, deleted = diff_snapshots(local_snapshot,
                                                remote_snapshot)

        files_to_upload = {
            filename.replace("\\", "/"): the_files[filename]
            for filename in new + modified
        }
        if files_to_upload:
            # Get the upload urls
            url = "%s/conans/%s/upload_urls" % (self._remote_api_url,
                                                "/".join(conan_reference))
            filesizes = {
                filename.replace("\\", "/"): len(content)
                for filename, content in files_to_upload.iteritems()
            }
            urls = self._get_json(url, data=filesizes)
            self.upload_files(urls, files_to_upload, self._output)
        if deleted:
            self.remove_conanfile_files(conan_reference, deleted)
示例#2
0
    def upload_package(self, package_reference, the_files):
        """
        basedir: Base directory with the files to upload (for read the files in disk)
        relative_files: relative paths to upload
        """
        self.check_credentials()

        # Get the remote snapshot
        remote_snapshot = self._get_package_snapshot(package_reference)
        local_snapshot = {filename: md5(content) for filename, content in the_files.items()}

        # Get the diff
        new, modified, deleted = diff_snapshots(local_snapshot, remote_snapshot)

        files_to_upload = {filename: the_files[filename] for filename in new + modified}
        if files_to_upload:        # Obtain upload urls
            url = "%s/conans/%s/packages/%s/upload_urls" % (self._remote_api_url,
                                                            "/".join(package_reference.conan),
                                                            package_reference.package_id)
            filesizes = {filename: len(content) for filename, content in files_to_upload.items()}
            self._output.rewrite_line("Requesting upload permissions...")
            urls = self._get_json(url, data=filesizes)
            self._output.rewrite_line("Requesting upload permissions...Done!")
            self._output.writeln("")
            self.upload_files(urls, files_to_upload, self._output)
        else:
            self._output.rewrite_line("Package is up to date.")
            self._output.writeln("")
        if deleted:
            self.remove_package_files(package_reference, deleted)
示例#3
0
文件: rest_client.py 项目: uael/conan
    def upload_recipe(self, conan_reference, the_files, retry, retry_wait, ignore_deleted_file):
        """
        the_files: dict with relative_path: content
        """
        self.check_credentials()

        # Get the remote snapshot
        remote_snapshot = self._get_conan_snapshot(conan_reference)
        local_snapshot = {filename: md5sum(abs_path) for filename, abs_path in the_files.items()}

        # Get the diff
        new, modified, deleted = diff_snapshots(local_snapshot, remote_snapshot)
        if ignore_deleted_file and ignore_deleted_file in deleted:
            deleted.remove(ignore_deleted_file)

        files_to_upload = {filename.replace("\\", "/"): the_files[filename]
                           for filename in new + modified}
        if files_to_upload:
            # Get the upload urls
            url = "%s/conans/%s/upload_urls" % (self._remote_api_url, "/".join(conan_reference))
            filesizes = {filename.replace("\\", "/"): os.stat(abs_path).st_size
                         for filename, abs_path in files_to_upload.items()}
            urls = self._get_json(url, data=filesizes)
            self.upload_files(urls, files_to_upload, self._output, retry, retry_wait)
        if deleted:
            self._remove_conanfile_files(conan_reference, deleted)
示例#4
0
    def upload_package(self, package_reference, the_files, retry, retry_wait,
                       no_overwrite):
        """
        basedir: Base directory with the files to upload (for read the files in disk)
        relative_files: relative paths to upload
        """
        self.check_credentials()

        t1 = time.time()
        # Get the remote snapshot
        remote_snapshot = self._get_package_snapshot(package_reference)
        local_snapshot = {
            filename: md5sum(abs_path)
            for filename, abs_path in the_files.items()
        }

        # Get the diff
        new, modified, deleted = diff_snapshots(local_snapshot,
                                                remote_snapshot)
        if not new and not deleted and modified in (["conanmanifest.txt"], []):
            return False

        if no_overwrite and remote_snapshot:
            if no_overwrite == "all":
                raise ConanException(
                    "Local package is different from the remote package. "
                    "Forbidden overwrite")

        files_to_upload = {
            filename: the_files[filename]
            for filename in new + modified
        }
        if files_to_upload:  # Obtain upload urls
            url = "%s/conans/%s/packages/%s/upload_urls" % (
                self.remote_api_url, "/".join(
                    package_reference.conan), package_reference.package_id)
            filesizes = {
                filename: os.stat(abs_path).st_size
                for filename, abs_path in files_to_upload.items()
            }
            self._output.rewrite_line("Requesting upload permissions...")
            urls = self._get_file_to_url_dict(url, data=filesizes)
            self._output.rewrite_line("Requesting upload permissions...Done!")
            self._output.writeln("")
            self._upload_files(urls, files_to_upload, self._output, retry,
                               retry_wait)
        if deleted:
            raise Exception(
                "This shouldn't be happening, deleted files "
                "in local package present in remote: %s.\n Please, report it at "
                "https://github.com/conan-io/conan/issues " % str(deleted))

        logger.debug("====> Time rest client upload_package: %f" %
                     (time.time() - t1))
        return files_to_upload or deleted
示例#5
0
    def upload_recipe(self, conan_reference, the_files, retry, retry_wait,
                      ignore_deleted_file, no_overwrite):
        """
        the_files: dict with relative_path: content
        """
        self.check_credentials()

        # Get the remote snapshot
        remote_snapshot = self._get_conan_snapshot(conan_reference)
        local_snapshot = {
            filename: md5sum(abs_path)
            for filename, abs_path in the_files.items()
        }

        # Get the diff
        new, modified, deleted = diff_snapshots(local_snapshot,
                                                remote_snapshot)
        if ignore_deleted_file and ignore_deleted_file in deleted:
            deleted.remove(ignore_deleted_file)

        if not new and not deleted and modified in (["conanmanifest.txt"], []):
            return False

        if no_overwrite and remote_snapshot:
            if no_overwrite in ("all", "recipe"):
                raise ConanException(
                    "Local recipe is different from the remote recipe. "
                    "Forbidden overwrite")
        files_to_upload = {
            filename.replace("\\", "/"): the_files[filename]
            for filename in new + modified
        }

        if files_to_upload:
            # Get the upload urls
            url = "%s/conans/%s/upload_urls" % (self._remote_api_url,
                                                "/".join(conan_reference))
            filesizes = {
                filename.replace("\\", "/"): os.stat(abs_path).st_size
                for filename, abs_path in files_to_upload.items()
            }
            urls = self._get_file_to_url_dict(url, data=filesizes)
            self.upload_files(urls, files_to_upload, self._output, retry,
                              retry_wait)
        if deleted:
            self._remove_conanfile_files(conan_reference, deleted)

        return files_to_upload or deleted
示例#6
0
    def upload_package(self, package_reference, the_files, retry, retry_wait):
        """
        basedir: Base directory with the files to upload (for read the files in disk)
        relative_files: relative paths to upload
        """
        self.check_credentials()

        t1 = time.time()
        # Get the remote snapshot
        remote_snapshot = self._get_package_snapshot(package_reference)
        local_snapshot = {
            filename: md5sum(abs_path)
            for filename, abs_path in the_files.items()
        }

        # Get the diff
        new, modified, deleted = diff_snapshots(local_snapshot,
                                                remote_snapshot)
        if not new and not deleted and modified == ["conanmanifest.txt"]:
            return False

        files_to_upload = {
            filename: the_files[filename]
            for filename in new + modified
        }
        if files_to_upload:  # Obtain upload urls
            url = "%s/conans/%s/packages/%s/upload_urls" % (
                self._remote_api_url, "/".join(
                    package_reference.conan), package_reference.package_id)
            filesizes = {
                filename: os.stat(abs_path).st_size
                for filename, abs_path in files_to_upload.items()
            }
            self._output.rewrite_line("Requesting upload permissions...")
            urls = self._get_json(url, data=filesizes)
            self._output.rewrite_line("Requesting upload permissions...Done!")
            self._output.writeln("")
            self.upload_files(urls, files_to_upload, self._output, retry,
                              retry_wait)
        if deleted:
            self._remove_package_files(package_reference, deleted)

        logger.debug("====> Time rest client upload_package: %f" %
                     (time.time() - t1))
        return files_to_upload or deleted
示例#7
0
    def upload_conan(self, conan_reference, the_files):
        """
        the_files: dict with relative_path: content
        """
        self.check_credentials()

        # Get the remote snapshot
        remote_snapshot = self._get_conan_snapshot(conan_reference)
        local_snapshot = {filename: md5(content) for filename, content in the_files.items()}

        # Get the diff
        new, modified, deleted = diff_snapshots(local_snapshot, remote_snapshot)

        files_to_upload = {filename.replace("\\", "/"): the_files[filename] for filename in new + modified}
        if files_to_upload:
            # Get the upload urls
            url = "%s/conans/%s/upload_urls" % (self._remote_api_url, "/".join(conan_reference))
            filesizes = {filename.replace("\\", "/"): len(content) for filename, content in files_to_upload.items()}
            urls = self._get_json(url, data=filesizes)
            self.upload_files(urls, files_to_upload, self._output)
        if deleted:
            self.remove_conanfile_files(conan_reference, deleted)
示例#8
0
    def upload_package(self, package_reference, the_files, retry, retry_wait, no_overwrite):
        """
        basedir: Base directory with the files to upload (for read the files in disk)
        relative_files: relative paths to upload
        """
        self.check_credentials()

        t1 = time.time()
        # Get the remote snapshot
        remote_snapshot = self._get_package_snapshot(package_reference)
        local_snapshot = {filename: md5sum(abs_path) for filename, abs_path in the_files.items()}

        # Get the diff
        new, modified, deleted = diff_snapshots(local_snapshot, remote_snapshot)
        if not new and not deleted and modified in (["conanmanifest.txt"], []):
            return False

        if no_overwrite and remote_snapshot:
            if no_overwrite in ("all"):
                raise ConanException("Local package is different from the remote package. "
                                     "Forbbiden overwrite")

        files_to_upload = {filename: the_files[filename] for filename in new + modified}
        if files_to_upload:        # Obtain upload urls
            url = "%s/conans/%s/packages/%s/upload_urls" % (self._remote_api_url,
                                                            "/".join(package_reference.conan),
                                                            package_reference.package_id)
            filesizes = {filename: os.stat(abs_path).st_size for filename,
                         abs_path in files_to_upload.items()}
            self._output.rewrite_line("Requesting upload permissions...")
            urls = self._get_file_to_url_dict(url, data=filesizes)
            self._output.rewrite_line("Requesting upload permissions...Done!")
            self._output.writeln("")
            self.upload_files(urls, files_to_upload, self._output, retry, retry_wait)
        if deleted:
            self._remove_package_files(package_reference, deleted)

        logger.debug("====> Time rest client upload_package: %f" % (time.time() - t1))
        return files_to_upload or deleted
示例#9
0
    def upload_recipe(self, conan_reference, the_files, retry, retry_wait, ignore_deleted_file,
                      no_overwrite):
        """
        the_files: dict with relative_path: content
        """
        self.check_credentials()

        # Get the remote snapshot
        remote_snapshot = self._get_conan_snapshot(conan_reference)
        local_snapshot = {filename: md5sum(abs_path) for filename, abs_path in the_files.items()}

        # Get the diff
        new, modified, deleted = diff_snapshots(local_snapshot, remote_snapshot)
        if ignore_deleted_file and ignore_deleted_file in deleted:
            deleted.remove(ignore_deleted_file)

        if not new and not deleted and modified in (["conanmanifest.txt"], []):
            return False

        if no_overwrite and remote_snapshot:
            if no_overwrite in ("all", "recipe"):
                raise ConanException("Local recipe is different from the remote recipe. "
                                     "Forbbiden overwrite")
        files_to_upload = {filename.replace("\\", "/"): the_files[filename]
                           for filename in new + modified}

        if files_to_upload:
            # Get the upload urls
            url = "%s/conans/%s/upload_urls" % (self._remote_api_url, "/".join(conan_reference))
            filesizes = {filename.replace("\\", "/"): os.stat(abs_path).st_size
                         for filename, abs_path in files_to_upload.items()}
            urls = self._get_file_to_url_dict(url, data=filesizes)
            self.upload_files(urls, files_to_upload, self._output, retry, retry_wait)
        if deleted:
            self._remove_conanfile_files(conan_reference, deleted)

        return files_to_upload or deleted