Skip to content

DV-164 - Calcula linhas alteradas pelo merge commit do PR - #70

Merged
felipeeffting merged 1 commit into
mainfrom
fix/diff-linhas-alteradas-merge-commit
Nov 9, 2026
Merged

felipeeffting merged 1 commit into
mainfrom
fix/diff-linhas-alteradas-merge-commit

Conversation

@duzmendonca

@duzmendonca duzmendonca commented Nov 5, 2026 •

Copy link
Copy Markdown
Contributor

O que muda

O entrypoint.sh decide se uma P1 bloqueia o merge conferindo se a linha da violação está entre as linhas alteradas pelo PR. Esse cálculo usava git diff BASE_SHA HEAD_SHA, que:

  • compara as pontas da base e da branch, sem merge-base. Com a branch atrás da base, o que a base mudou entra como alteração do PR;
  • numera as linhas pelo head, enquanto o CodeNarc analisa o merge commit (refs/pull/N/merge).

Resultado: linha legada marcada como alterada (falso positivo, ticket DV-164) e linha realmente alterada pelo PR sem marcação (falso negativo, a P1 não bloquearia).

Agora, quando o HEAD é o merge sintético do PR (2º pai igual a GITHUB_HEAD_SHA), o diff é HEAD^1..HEAD: só as mudanças do PR, na numeração analisada. Qualquer outro caso segue no fallback anterior. O log passa a informar qual ramo foi usado.

Item no Jira

https://asaasdev.atlassian.net/browse/DV-164

Fluxos/funcionalidades impactadas

Cálculo de linhas alteradas que decide o bloqueio de P1 (generate_git_diff e build_changed_lines_cache). Afeta todo repositório que usa a imagem via codenarc-action.

Retrocompatibilidade

Sem mudança de input nem de formato de saída. Limite conhecido: com fetch-depth: 1 o merge commit não traz os pais e a execução continua no fallback anterior, com o comportamento de antes. O workflow do asaas-core usa fetch-depth: 2.

Testes

Reproduzi o cenário com um repositório git temporário (branch atrás da base, a base removendo código antes da linha legada):

Cenário Antes Depois
Merge sintético do PR legado marcado, linha nova não só a linha nova marcada
Head do PR com merge da release no topo ok ok (a guarda impede HEAD^1..HEAD, que perderia a linha do PR)

Sintaxe validada com sh -n. O script de reprodução não está versionado neste PR.

🤖 Generated with Claude Code

O diff BASE_SHA..HEAD_SHA comparava as pontas da base e da branch sem usar o merge-base e numerava as linhas pelo head, enquanto o CodeNarc analisa o merge commit. Com a branch atrás da base, linhas legadas eram marcadas como alteradas (falso positivo) e linhas do PR podiam não ser marcadas (falso negativo).

Agora, quando o HEAD é o merge sintético do PR (2º pai igual a GITHUB_HEAD_SHA), usa HEAD^1..HEAD. Os demais casos seguem no fallback anterior. O log informa qual ramo foi usado.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Comment thread entrypoint.sh Resolved
Comment thread entrypoint.sh Resolved
Comment thread entrypoint.sh Resolved
Comment thread entrypoint.sh Resolved
Comment thread entrypoint.sh Resolved
Comment thread entrypoint.sh Resolved
Comment thread entrypoint.sh Resolved
Comment thread entrypoint.sh Resolved
Comment thread entrypoint.sh Resolved
@duzmendonca duzmendonca self-assigned this Nov 5, 2026
@duzmendonca duzmendonca changed the title fix: calcula linhas alteradas pelo merge commit do PR (DV-164) DV-164 - Calcula linhas alteradas pelo merge commit do PR Nov 5, 2026
@felipeeffting
felipeeffting merged commit 81a2ee7 into main Nov 9, 2026
15 of 16 checks passed
@felipeeffting
felipeeffting deleted the fix/diff-linhas-alteradas-merge-commit branch November 9, 2026 14:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants