mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-07-16 21:56:29 +00:00
Add support for git repo
This commit is contained in:
parent
9afb136648
commit
f127de8059
13
hassio/addons/__init__.py
Normal file
13
hassio/addons/__init__.py
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
"""Init file for HassIO addons."""
|
||||||
|
import logging
|
||||||
|
|
||||||
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class AddonManager(object):
|
||||||
|
"""Manage addons inside HassIO."""
|
||||||
|
|
||||||
|
def __init__(self, config, loop):
|
||||||
|
"""Initialize docker base wrapper."""
|
||||||
|
self.config = config
|
||||||
|
self.loop = loop
|
59
hassio/addons/git.py
Normal file
59
hassio/addons/git.py
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
"""Init file for HassIO addons git."""
|
||||||
|
import asyncio
|
||||||
|
import logging
|
||||||
|
import os
|
||||||
|
|
||||||
|
import git
|
||||||
|
|
||||||
|
from ..const import URL_HASSIO_ADDONS
|
||||||
|
|
||||||
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class AddonsRepo(object):
|
||||||
|
"""Manage addons git repo."""
|
||||||
|
|
||||||
|
def __init__(self, config, loop):
|
||||||
|
"""Initialize docker base wrapper."""
|
||||||
|
self.config = config
|
||||||
|
self.loop = loop
|
||||||
|
self.repo = None
|
||||||
|
self._lock = asyncio.Lock(loop=loop)
|
||||||
|
|
||||||
|
async def init(self):
|
||||||
|
"""Init git addon repo."""
|
||||||
|
if not os.path.isdir(self.config.path_addons_repo):
|
||||||
|
return await self.clone()
|
||||||
|
|
||||||
|
await with self._lock:
|
||||||
|
try:
|
||||||
|
self.repo = await self.loop.run_in_executor(
|
||||||
|
None, git.Repo(self.config.path_addons_repo))
|
||||||
|
|
||||||
|
except (git.InvalidGitRepositoryError, git.NoSuchPathError) as err:
|
||||||
|
_LOGGER.error("Can't load addons repo: %s.", err)
|
||||||
|
|
||||||
|
async def clone(self):
|
||||||
|
"""Clone git addon repo."""
|
||||||
|
await with self._lock:
|
||||||
|
try:
|
||||||
|
self.repo = await self.loop.run_in_executor(
|
||||||
|
None, git.Repo.clone_from, URL_HASSIO_ADDONS,
|
||||||
|
self.config.path_addons_repo)
|
||||||
|
|
||||||
|
except (git.InvalidGitRepositoryError, git.NoSuchPathError) as err:
|
||||||
|
_LOGGER.error("Can't clone addons repo: %s.", err)
|
||||||
|
|
||||||
|
async def pull(self):
|
||||||
|
"""Pull git addon repo."""
|
||||||
|
if self._lock.locked():
|
||||||
|
_LOGGER.warning("It is already a task in progress.")
|
||||||
|
return
|
||||||
|
|
||||||
|
await with self._lock:
|
||||||
|
try:
|
||||||
|
yield from self.loop.run_in_executor(
|
||||||
|
None, self.repo.remotes.origin.pull)
|
||||||
|
|
||||||
|
except (git.InvalidGitRepositoryError, git.NoSuchPathError) as err:
|
||||||
|
_LOGGER.error("Can't pull addons repo: %s.", err)
|
@ -14,6 +14,10 @@ HOMEASSISTANT_CURRENT = 'homeassistant_current'
|
|||||||
|
|
||||||
HASSIO_SSL = "{}/ssl"
|
HASSIO_SSL = "{}/ssl"
|
||||||
HASSIO_CURRENT = 'hassio_current'
|
HASSIO_CURRENT = 'hassio_current'
|
||||||
|
|
||||||
|
ADDONS_REPO = "{}/addons"
|
||||||
|
ADDONS_DATA = "{}/addons_data"
|
||||||
|
|
||||||
UPSTREAM_BETA = 'upstream_beta'
|
UPSTREAM_BETA = 'upstream_beta'
|
||||||
|
|
||||||
|
|
||||||
@ -112,3 +116,18 @@ class CoreConfig(object):
|
|||||||
def path_ssl(self):
|
def path_ssl(self):
|
||||||
"""Return SSL path inside supervisor."""
|
"""Return SSL path inside supervisor."""
|
||||||
return HASSIO_SSL.format(HASSIO_SHARE)
|
return HASSIO_SSL.format(HASSIO_SHARE)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def path_addons_repo(self):
|
||||||
|
"""Return git repo path for addons."""
|
||||||
|
return ADDONS_REPO.format(HASSIO_SHARE)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def path_addons_data(self):
|
||||||
|
"""Return root addon data folder."""
|
||||||
|
return ADDONS_DATA.format(HASSIO_SHARE)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def path_addons_data_docker(self):
|
||||||
|
"""Return root addon data folder extern for docker."""
|
||||||
|
return ADDONS_DATA.format(os.environ['SUPERVISOR_SHARE'])
|
||||||
|
@ -6,7 +6,7 @@ URL_HASSIO_VERSION = \
|
|||||||
URL_HASSIO_VERSION_BETA = \
|
URL_HASSIO_VERSION_BETA = \
|
||||||
'https://raw.githubusercontent.com/pvizeli/hassio/master/version_beta.json'
|
'https://raw.githubusercontent.com/pvizeli/hassio/master/version_beta.json'
|
||||||
|
|
||||||
URL_ADDONS_REPO = 'https://github.com/pvizeli/hassio-addons'
|
URL_HASSIO_ADDONS = 'https://github.com/pvizeli/hassio-addons'
|
||||||
|
|
||||||
HASSIO_SHARE = "/data"
|
HASSIO_SHARE = "/data"
|
||||||
|
|
||||||
|
3
setup.py
3
setup.py
@ -29,7 +29,7 @@ setup(
|
|||||||
keywords=['docker', 'home-assistant', 'api'],
|
keywords=['docker', 'home-assistant', 'api'],
|
||||||
zip_safe=False,
|
zip_safe=False,
|
||||||
platforms='any',
|
platforms='any',
|
||||||
packages=['hassio', 'hassio.dock', 'hassio.api'],
|
packages=['hassio', 'hassio.dock', 'hassio.api', 'hassio.addons'],
|
||||||
include_package_data=True,
|
include_package_data=True,
|
||||||
install_requires=[
|
install_requires=[
|
||||||
'async_timeout',
|
'async_timeout',
|
||||||
@ -37,5 +37,6 @@ setup(
|
|||||||
'docker',
|
'docker',
|
||||||
'colorlog',
|
'colorlog',
|
||||||
'voluptuous',
|
'voluptuous',
|
||||||
|
'gitpython',
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user