55 lines
1.9 KiB
Python
55 lines
1.9 KiB
Python
import os
|
|
from git import Repo
|
|
from packaging.version import Version
|
|
|
|
def get_highest_remote_tag(repo_path):
|
|
try:
|
|
# Abre el repositorio local
|
|
repo = Repo(repo_path)
|
|
|
|
# Asegúrate de que el repositorio tiene un remoto
|
|
if not repo.remotes:
|
|
return None # No hay remotos configurados
|
|
|
|
# Obtén el remoto por defecto (origin o el primero disponible)
|
|
remote = repo.remotes.origin
|
|
|
|
# Recupera los tags remotos
|
|
remote.fetch(tags=True)
|
|
remote_tags = [ref.name.split('/')[-1] for ref in repo.references if ref.path.startswith('refs/tags/')]
|
|
if not remote_tags:
|
|
return None # No hay tags remotos
|
|
|
|
# Ordena los tags remotos por versión
|
|
tags_sorted = sorted(remote_tags, key=lambda t: Version(t) if t.replace('.', '').isdigit() else Version('0.0.0'), reverse=True)
|
|
return tags_sorted[0] if tags_sorted else None
|
|
|
|
except Exception as e:
|
|
print(f"Error al procesar el repositorio {repo_path}: {e}")
|
|
return None
|
|
|
|
def process_selected_repositories(base_path, repo_names):
|
|
repo_highest_tags = {}
|
|
for repo_name in repo_names:
|
|
repo_path = os.path.join(base_path, repo_name)
|
|
if os.path.exists(repo_path) and os.path.isdir(os.path.join(repo_path, '.git')):
|
|
highest_tag = get_highest_remote_tag(repo_path)
|
|
repo_highest_tags[repo_name] = highest_tag
|
|
else:
|
|
repo_highest_tags[repo_name] = "No es un repositorio Git válido"
|
|
return repo_highest_tags
|
|
|
|
# Ruta base donde están los repositorios locales
|
|
base_path = "../"
|
|
|
|
# Lista de nombres de repositorios específicos
|
|
repo_names = [ "ogcore" , "oggui" , "ogboot" , "ogdhcp" , "ogrepository" ]
|
|
|
|
result = process_selected_repositories(base_path, repo_names)
|
|
|
|
# Muestra los resultados
|
|
for repo_name, tag in result.items():
|
|
print(f'{repo_name}:{tag}')
|
|
|
|
|