|
|
|
|
@ -13,7 +13,7 @@ import shutil
|
|
|
|
|
import urllib.parse
|
|
|
|
|
import urllib.request
|
|
|
|
|
import hashlib
|
|
|
|
|
|
|
|
|
|
from datetime import datetime
|
|
|
|
|
from o3de import manifest, utils, validation
|
|
|
|
|
|
|
|
|
|
logger = logging.getLogger()
|
|
|
|
|
@ -27,6 +27,7 @@ def process_add_o3de_repo(file_name: str or pathlib.Path,
|
|
|
|
|
return 1
|
|
|
|
|
cache_folder = manifest.get_o3de_cache_folder()
|
|
|
|
|
|
|
|
|
|
repo_data = {}
|
|
|
|
|
with file_name.open('r') as f:
|
|
|
|
|
try:
|
|
|
|
|
repo_data = json.load(f)
|
|
|
|
|
@ -34,6 +35,17 @@ def process_add_o3de_repo(file_name: str or pathlib.Path,
|
|
|
|
|
logger.error(f'{file_name} failed to load: {str(e)}')
|
|
|
|
|
return 1
|
|
|
|
|
|
|
|
|
|
with file_name.open('w') as f:
|
|
|
|
|
try:
|
|
|
|
|
time_now = datetime.now()
|
|
|
|
|
# Convert to lower case because AM/PM is capitalized
|
|
|
|
|
time_str = time_now.strftime('%d/%m/%Y %I:%M%p').lower()
|
|
|
|
|
repo_data.update({'last_updated': time_str})
|
|
|
|
|
f.write(json.dumps(repo_data, indent=4) + '\n')
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(f'{file_name} failed to save: {str(e)}')
|
|
|
|
|
return 1
|
|
|
|
|
|
|
|
|
|
# A repo may not contain all types of object.
|
|
|
|
|
manifest_download_list = []
|
|
|
|
|
try:
|
|
|
|
|
@ -141,6 +153,29 @@ def get_gem_json_paths_from_all_cached_repos() -> set:
|
|
|
|
|
return gem_set
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def refresh_repo(repo_uri: str,
|
|
|
|
|
cache_folder: str = None,
|
|
|
|
|
repo_set: set = None) -> int:
|
|
|
|
|
if not cache_folder:
|
|
|
|
|
cache_folder = manifest.get_o3de_cache_folder()
|
|
|
|
|
if not repo_set:
|
|
|
|
|
repo_set = set()
|
|
|
|
|
|
|
|
|
|
parsed_uri = urllib.parse.urlparse(f'{repo_uri}/repo.json')
|
|
|
|
|
repo_sha256 = hashlib.sha256(parsed_uri.geturl().encode())
|
|
|
|
|
cache_file = cache_folder / str(repo_sha256.hexdigest() + '.json')
|
|
|
|
|
|
|
|
|
|
download_file_result = utils.download_file(parsed_uri, cache_file)
|
|
|
|
|
if download_file_result != 0:
|
|
|
|
|
return download_file_result
|
|
|
|
|
|
|
|
|
|
if not validation.valid_o3de_repo_json(cache_file):
|
|
|
|
|
logger.error(f'Repo json {repo_uri} is not valid.')
|
|
|
|
|
cache_file.unlink()
|
|
|
|
|
return 1
|
|
|
|
|
|
|
|
|
|
return process_add_o3de_repo(cache_file, repo_set)
|
|
|
|
|
|
|
|
|
|
def refresh_repos() -> int:
|
|
|
|
|
json_data = manifest.load_o3de_manifest()
|
|
|
|
|
|
|
|
|
|
@ -158,20 +193,7 @@ def refresh_repos() -> int:
|
|
|
|
|
if repo_uri not in repo_set:
|
|
|
|
|
repo_set.add(repo_uri)
|
|
|
|
|
|
|
|
|
|
parsed_uri = urllib.parse.urlparse(f'{repo_uri}/repo.json')
|
|
|
|
|
repo_sha256 = hashlib.sha256(parsed_uri.geturl().encode())
|
|
|
|
|
cache_file = cache_folder / str(repo_sha256.hexdigest() + '.json')
|
|
|
|
|
if not cache_file.is_file():
|
|
|
|
|
download_file_result = utils.download_file(parsed_uri, cache_file)
|
|
|
|
|
if download_file_result != 0:
|
|
|
|
|
return download_file_result
|
|
|
|
|
|
|
|
|
|
if not validation.valid_o3de_repo_json(cache_file):
|
|
|
|
|
logger.error(f'Repo json {repo_uri} is not valid.')
|
|
|
|
|
cache_file.unlink()
|
|
|
|
|
return 1
|
|
|
|
|
|
|
|
|
|
last_failure = process_add_o3de_repo(cache_file, repo_set)
|
|
|
|
|
last_failure = refresh_repo(repo_uri, cache_folder, repo_set)
|
|
|
|
|
if last_failure:
|
|
|
|
|
result = last_failure
|
|
|
|
|
|
|
|
|
|
|