Improve Package Manager when check for updates // Resolve #892

This commit is contained in:
Ivan Kravets committed 2017-01-30 20:21:16 +02:00
1 parent 1d1c677c81
commit 1143012216
7 files changed
+111 -100

No files matched your search

+1 -1
View File
@@ -14,7 +14,7 @@
import sys
VERSION = (3, 3, "0a8")
VERSION = (3, 3, "0a9")
__version__ = ".".join([str(s) for s in VERSION])
__title__ = "platformio"
+3 -2
View File
@@ -212,10 +212,11 @@ class LibraryManager(BasePkgManager):
item = v
return item
def get_latest_repo_version(self, name, requirements):
def get_latest_repo_version(self, name, requirements, silent=False):
item = self.max_satisfying_repo_version(
util.get_api_result(
"/lib/info/%d" % self.get_pkg_id_by_name(name, requirements),
"/lib/info/%d" % self.get_pkg_id_by_name(
name, requirements, silent=silent),
cache_valid="1d")['versions'],
requirements)
return item['name'] if item else None
+18 -5
View File
@@ -103,7 +103,11 @@ class PkgRepoMixin(object):
item = v
return item
def get_latest_repo_version(self, name, requirements):
def get_latest_repo_version( # pylint: disable=unused-argument
self,
name,
requirements,
silent=False):
version = None
for versions in PackageRepoIterator(name, self.repositories):
pkgdata = self.max_satisfying_repo_version(versions, requirements)
@@ -193,14 +197,16 @@ class PkgInstallerMixin(object):
else:
pkg_dir = dirname(pkg_dir)
is_vcs_pkg = False
if isfile(path) and path.endswith(self.VCS_MANIFEST_NAME):
is_vcs_pkg = True
pkg_dir = dirname(dirname(path))
# return from cache
if self.package_dir in PkgInstallerMixin._INSTALLED_CACHE:
for manifest in PkgInstallerMixin._INSTALLED_CACHE[self.
package_dir]:
if manifest['__pkg_dir'] == pkg_dir:
if not is_vcs_pkg and manifest['__pkg_dir'] == pkg_dir:
return manifest
manifest = {}
@@ -491,8 +497,14 @@ class BasePkgManager(PkgRepoMixin, PkgInstallerMixin):
package_dir = self.get_package_dir(name, requirements, url)
if not package_dir:
return None
manifest = self.load_manifest(package_dir)
if self.get_vcs_manifest_path(package_dir):
is_vcs_pkg = False
manifest_path = self.get_vcs_manifest_path(package_dir)
if manifest_path:
is_vcs_pkg = True
manifest = self.load_manifest(manifest_path)
else:
manifest = self.load_manifest(package_dir)
if is_vcs_pkg:
vcs = VCSClientFactory.newClient(
package_dir, manifest['url'], silent=True)
if not vcs.can_be_updated:
@@ -500,7 +512,8 @@ class BasePkgManager(PkgRepoMixin, PkgInstallerMixin):
latest = vcs.get_latest_revision()
else:
try:
latest = self.get_latest_repo_version(name, requirements)
latest = self.get_latest_repo_version(
name, requirements, silent=True)
except (exception.PlatformioException, ValueError):
return None
if not latest:
+12 -3
View File
@@ -116,6 +116,14 @@ class GitClient(VCSClientBase):
output = output.replace("*", "") # fix active branch
return [b.strip() for b in output.split("\n")]
def get_current_branch(self):
output = self.get_cmd_output(["branch"])
for line in output.split("\n"):
line = line.strip()
if line.startswith("*"):
return line[1:].strip()
return None
def get_tags(self):
output = self.get_cmd_output(["tag", "-l"])
return [t.strip() for t in output.split("\n")]
@@ -151,11 +159,12 @@ class GitClient(VCSClientBase):
def get_latest_revision(self):
if not self.can_be_updated:
return self.get_latest_revision()
branch = self.get_current_branch()
result = self.get_cmd_output(["ls-remote"])
for line in result.split("\n"):
line = line.strip()
if "HEAD" in line:
return line.split("HEAD", 1)[0].strip()[:7]
ref_pos = line.strip().find("refs/heads/" + branch)
if ref_pos > 0:
return line[:ref_pos].strip()[:7]
return None