forked from platformio/platformio-core
Improve Package Manager when check for updates // Resolve #892
This commit is contained in:
1 parent
1d1c677c81
commit
1143012216
7 files changed
+111
-100
No files matched your search
@@ -14,7 +14,7 @@
|
||||
|
||||
import sys
|
||||
|
||||
VERSION = (3, 3, "0a8")
|
||||
VERSION = (3, 3, "0a9")
|
||||
__version__ = ".".join([str(s) for s in VERSION])
|
||||
|
||||
__title__ = "platformio"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
|
||||
|
||||
Reference in new issue
Block a user