This commit is contained in:
Maxim Slipenko 2024-01-16 20:45:06 +03:00
parent 250fe07bf0
commit 233c11efec
4 changed files with 106 additions and 39 deletions

View File

@ -0,0 +1 @@
REPO_PATH=

View File

@ -1,15 +1,17 @@
import os
import shutil
import subprocess
import tempfile
import re
from autorepacked import utils
def _get_file(directory):
files_and_dirs = os.listdir(directory)
files = [f for f in files_and_dirs if os.path.isfile(os.path.join(directory, f))]
return os.path.join(directory, files[0]) if files else None
class BaseProvider:
def __init__(self, config):
self.config = config
@ -21,14 +23,14 @@ class BaseProvider:
return self._name
def get_version(self):
url = subprocess.run([
url = utils.run([
'epm',
'--silent',
'tool',
'eget',
'--get-real-url',
self.get_download_url(),
], stdout=subprocess.PIPE).stdout.decode('utf-8')
])
pattern = r'\d+\.\d+\.\d+'
match = re.search(pattern, url)
@ -44,48 +46,36 @@ class BaseProvider:
download_directory = tempfile.mkdtemp()
repacked_directory = tempfile.mkdtemp()
subprocess.run(
args=[
'epm',
'--silent',
'tool',
'eget',
'-q',
self.get_download_url(),
],
stdout=subprocess.PIPE,
cwd=download_directory,
).stdout.decode('utf-8')
utils.run([
'epm',
'--silent',
'tool',
'eget',
'-q',
self.get_download_url(),
], cwd=download_directory)
file = _get_file(download_directory)
subprocess.run(
args=[
'epm',
'--silent',
'-y',
'repack',
file,
],
stdout=subprocess.PIPE,
cwd=repacked_directory,
).stdout.decode('utf-8')
utils.run([
'epm',
'--silent',
'-y',
'repack',
file,
], cwd=repacked_directory)
shutil.rmtree(download_directory)
file = _get_file(repacked_directory)
subprocess.run(
args=[
'epm',
'--silent',
'repo',
'pkgadd',
self.config.get('repo_path'),
file,
],
stdout=subprocess.PIPE,
cwd=repacked_directory,
).stdout.decode('utf-8')
utils.run([
'epm',
'--silent',
'repo',
'pkgadd',
self.config.get('repo_path'),
file,
], cwd=repacked_directory)
shutil.rmtree(repacked_directory)

67
autorepacked/main.py Normal file
View File

@ -0,0 +1,67 @@
import json
import os
import importlib
from autorepacked import utils
from autorepacked.base_provider import BaseProvider
from autorepacked.config import Config
def create_repo(config):
utils.run([
'epm',
'repo',
'create',
config.get('repo_path')
])
def main():
config = Config()
create_repo(config)
providers_path = os.path.join(os.getcwd(), 'autorepacked/providers')
modules = os.listdir(providers_path)
json_file_path = os.path.join(config.get('repo_path'), 'data.json')
if not os.path.exists(json_file_path):
with open(json_file_path, 'w') as data_file:
json.dump({'versions': {}}, data_file, indent=4)
with open(json_file_path, 'r') as data_file:
repo_data = json.load(data_file)
versions = repo_data['versions']
need_update_index = False
for module_name in modules:
module = importlib.import_module(f'providers.{module_name}')
if hasattr(module, 'get_provider'):
provider = module.get_provider(config) # type: BaseProvider
name = provider.get_name()
print(f"request version of {name}")
version = provider.get_version()
if name not in versions or versions[name] != version:
print(f'{name} has new version {version}')
versions[name] = version
provider.download()
need_update_index = True
repo_data['versions'] = versions
with open(json_file_path, 'w') as data_file:
json.dump(repo_data, data_file, indent=4)
if need_update_index:
utils.run(
args=[
'epm',
'repo',
'index',
config.get('repo_path'),
]
)
if __name__ == "__main__":
main()

9
autorepacked/utils.py Normal file
View File

@ -0,0 +1,9 @@
import subprocess
def run(args, cwd=None):
return subprocess.run(
args=args,
cwd=cwd,
stdout=subprocess.PIPE,
).stdout.decode('utf-8')