refactor: update remote tag fetching behaviour so it uses api instead of shallow clone
This commit is contained in:
+19
-10
@@ -33,17 +33,26 @@ def tag(token: Optional[str] = None):
|
||||
raise GitFlowError("No hay token disponible")
|
||||
|
||||
merge_commit = get_last_merge_commit()
|
||||
# Con varios entornos cada uno versiona por separado (v1.0.0-prod), con uno solo no hace falta
|
||||
suffix = f"-{target}" if len(base.environments) > 1 else ""
|
||||
|
||||
if ci:
|
||||
# Pipeline: no asumimos historial completo, los commits del PR se piden a la API
|
||||
# Commits se obtienen por API del ultimo PR / MR mergeado
|
||||
commits = base.get_remote_api(token).get_merge_commits(merge_commit)
|
||||
commits = [c for c in commits if not c.is_merge]
|
||||
# Último tag se obtiene por API filtrando por sufijo
|
||||
current_tag = base.get_remote_api(token).get_latest_tag(suffix)
|
||||
else:
|
||||
# Commits se obtienen del último merge, listando hasta el primer forkpoint
|
||||
branch = Git("show", merge_commit + "^2", patch=False, format="%h").firstline()
|
||||
fork_point = Git.get_first_fork_point(branch, target)
|
||||
commits = Git.get_commits(fork_point, branch)
|
||||
# Último tag se obtiene localmente
|
||||
current_tag = Git.get_current_tag(suffix)
|
||||
|
||||
next_tag = get_next_tag_from_commits([c.subject for c in commits], target)
|
||||
next_tag = get_next_tag_from_commits(
|
||||
[c.subject for c in commits], suffix, current_tag
|
||||
)
|
||||
|
||||
if not next_tag:
|
||||
base.io_info(
|
||||
@@ -90,17 +99,19 @@ def check_not_tagged(commit: str):
|
||||
raise GitFlowError("El commit a taggear ya tiene tag: " + tag)
|
||||
|
||||
|
||||
def get_next_tag_from_commits(commits: list[str], branch: str) -> str | None:
|
||||
def get_next_tag_from_commits(
|
||||
commits: list[str], suffix: str, current_tag: str | None
|
||||
) -> str | None:
|
||||
increment = SEMVER_SKIP
|
||||
for commit in commits:
|
||||
commit_type = commit.partition(":")[0]
|
||||
increment = max(increment, COMMIT_TYPE_INCREMENT.get(commit_type, SEMVER_SKIP))
|
||||
|
||||
tag = Git.get_current_tag() or f"v0.0.0-{branch}"
|
||||
if increment == SEMVER_SKIP:
|
||||
return None
|
||||
|
||||
until_dash = tag.index("-") if "-" in tag else None
|
||||
suffix = tag[until_dash:] if until_dash is not None else ""
|
||||
[major, minor, patch] = map(int, tag[1:until_dash].split("."))
|
||||
version = (current_tag or "v0.0.0" + suffix).removeprefix("v").removesuffix(suffix)
|
||||
[major, minor, patch] = map(int, version.split("."))
|
||||
|
||||
if increment == SEMVER_MAJOR:
|
||||
major += 1
|
||||
@@ -111,7 +122,5 @@ def get_next_tag_from_commits(commits: list[str], branch: str) -> str | None:
|
||||
patch = 0
|
||||
elif increment == SEMVER_PATCH:
|
||||
patch += 1
|
||||
elif increment == SEMVER_SKIP:
|
||||
suffix = "-r" + Git("rev-list", "HEAD", count=True).firstline()
|
||||
|
||||
return None if increment == SEMVER_SKIP else f"v{major}.{minor}.{patch}{suffix}"
|
||||
return f"v{major}.{minor}.{patch}{suffix}"
|
||||
|
||||
Reference in New Issue
Block a user