safepatch 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- safepatch-0.1.0/PKG-INFO +281 -0
- safepatch-0.1.0/README.md +250 -0
- safepatch-0.1.0/analisador/__init__.py +20 -0
- safepatch-0.1.0/analisador/__main__.py +4 -0
- safepatch-0.1.0/analisador/bin/cfr.jar +0 -0
- safepatch-0.1.0/analisador/cli.py +142 -0
- safepatch-0.1.0/analisador/comparador.py +74 -0
- safepatch-0.1.0/analisador/diferenciador.py +216 -0
- safepatch-0.1.0/analisador/exportadores.py +569 -0
- safepatch-0.1.0/analisador/leitor.py +50 -0
- safepatch-0.1.0/analisador/modelos.py +59 -0
- safepatch-0.1.0/analisador/relatorio.py +104 -0
- safepatch-0.1.0/pyproject.toml +65 -0
- safepatch-0.1.0/safepatch.egg-info/PKG-INFO +281 -0
- safepatch-0.1.0/safepatch.egg-info/SOURCES.txt +18 -0
- safepatch-0.1.0/safepatch.egg-info/dependency_links.txt +1 -0
- safepatch-0.1.0/safepatch.egg-info/entry_points.txt +3 -0
- safepatch-0.1.0/safepatch.egg-info/top_level.txt +1 -0
- safepatch-0.1.0/setup.cfg +4 -0
- safepatch-0.1.0/tests/test_analisador.py +238 -0
safepatch-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: safepatch
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Ferramenta CLI de auditoria e comparação de pacotes Java/compactados (.jar, .war, .zip) com detecção de conflitos e diff descompilado
|
|
5
|
+
Author-email: Matheus Braga <contato@matheusbraga.dev>
|
|
6
|
+
Maintainer-email: Matheus Braga <contato@matheusbraga.dev>
|
|
7
|
+
License: MIT
|
|
8
|
+
Project-URL: Homepage, https://matheusbraga.dev
|
|
9
|
+
Project-URL: Repository, https://github.com/matheusbraga-dev/safepatch
|
|
10
|
+
Project-URL: Issues, https://github.com/matheusbraga-dev/safepatch/issues
|
|
11
|
+
Project-URL: Documentation, https://github.com/matheusbraga-dev/safepatch#readme
|
|
12
|
+
Keywords: java,jar,war,zip,diff,decompiler,cfr,patch,audit,cli
|
|
13
|
+
Classifier: Development Status :: 4 - Beta
|
|
14
|
+
Classifier: Environment :: Console
|
|
15
|
+
Classifier: Intended Audience :: Developers
|
|
16
|
+
Classifier: Intended Audience :: System Administrators
|
|
17
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
18
|
+
Classifier: Operating System :: OS Independent
|
|
19
|
+
Classifier: Programming Language :: Python :: 3
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
24
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
25
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
26
|
+
Classifier: Topic :: Software Development :: Build Tools
|
|
27
|
+
Classifier: Topic :: Software Development :: Version Control
|
|
28
|
+
Classifier: Topic :: Utilities
|
|
29
|
+
Requires-Python: >=3.8
|
|
30
|
+
Description-Content-Type: text/markdown
|
|
31
|
+
|
|
32
|
+
# 📦 Analisador de Pacotes (.jar / .zip)
|
|
33
|
+
|
|
34
|
+
Uma ferramenta de linha de comando (CLI) em Python de alta performance para inspeção, auditoria e comparação de pacotes compactados (`.jar`, `.war`, `.zip`). Desenvolvida para detectar conflitos, arquivos alterados, adições e remoções entre versões de artefatos de release, patches e bibliotecas.
|
|
35
|
+
|
|
36
|
+
Zero dependências externas: construída exclusivamente com a **biblioteca padrão do Python**.
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## 🚀 Funcionalidades
|
|
41
|
+
|
|
42
|
+
* ⚡ **Leitura Otimizada em Streaming**: Processa pacotes lendo blocos de 64KB sob demanda, permitindo analisar arquivos pesados com consumo mínimo de memória RAM.
|
|
43
|
+
* 🔒 **Verificação de Integridade (SHA-256)**: Compara o hash SHA-256 de cada arquivo interno para garantir a detecção exata de modificações lógicas, mesmo quando as datas de modificação ou atributos forem alterados.
|
|
44
|
+
* 📊 **Cálculo de Variação (Delta)**: Exibe a diferença de tamanho (em bytes, KB, MB) para cada arquivo modificado (ex: `1.81 KB → 2.39 KB | +602 B`).
|
|
45
|
+
* 🔍 **Diff no Estilo Git (`-d / --diff`)**:
|
|
46
|
+
* Mostra as linhas adicionadas (`+`) e removidas (`-`) em arquivos modificados, novos e deletados.
|
|
47
|
+
* Suporta arquivos de texto puro (XML, JSON, properties, YAML, SQL, código-fonte, etc.).
|
|
48
|
+
* **Desmontagem de Bytecode Java (.class)**: Se o utilitário `javap` estiver instalado no sistema, desmonta automaticamente os arquivos `.class` e compara as assinaturas de métodos e atributos no estilo Git.
|
|
49
|
+
* 🎯 **Filtro de Exclusão com Padrões Glob (`-i / --ignorar`)**: Permite ignorar metadados voláteis como `META-INF/*`, arquivos de documentação (`*.md`) ou logs.
|
|
50
|
+
* 📄 **Múltiplos Formatos de Relatório**:
|
|
51
|
+
* **Console (Terminal)**: Colorido via ANSI com modo compacto ou verboso (`--verbose`).
|
|
52
|
+
* **JSON (`--json`)**: Estruturado com metadados e totais, ideal para integrações e APIs.
|
|
53
|
+
* **Markdown (`--markdown / --md`)**: Tabelas prontas para documentação ou Pull Requests.
|
|
54
|
+
* **HTML (`--html`)**: Dashboard visual moderno, responsivo e 100% autossuficiente (sem dependências externas).
|
|
55
|
+
* 🤖 **Pronto para CI/CD (`--fail-on-conflict`)**: Retorna código de saída `2` se detectar arquivos conflitantes/modificados, permitindo travar esteiras de deploy indesejadas.
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## 📋 Requisitos
|
|
60
|
+
|
|
61
|
+
* **Python 3.8+** (compatível com Linux, macOS e Windows).
|
|
62
|
+
* Nenhuma biblioteca externa necessária (`pip install` desnecessário).
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## 🛠️ Instalação e Configuração
|
|
67
|
+
|
|
68
|
+
Clone o repositório ou copie os arquivos para sua máquina:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
git clone https://github.com/matheusbraga-dev/safepatch.git
|
|
72
|
+
cd cli
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Para validar a integridade da instalação, execute a suíte de testes:
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
python -m unittest discover tests
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## 💻 Guia de Uso
|
|
84
|
+
|
|
85
|
+
### 1. Comparação Básica
|
|
86
|
+
|
|
87
|
+
Para comparar dois pacotes `.jar` ou `.zip`:
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
python main.py --base "caminho/para/versao_antiga.jar" --alvo "caminho/para/versao_nova.jar"
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
**Exemplo de saída no terminal:**
|
|
94
|
+
```text
|
|
95
|
+
Iniciando varredura dos pacotes...
|
|
96
|
+
Lendo pacote base: versao_antiga.jar...
|
|
97
|
+
Lendo pacote alvo: versao_nova.jar...
|
|
98
|
+
Analisando diferenças e detectando conflitos...
|
|
99
|
+
|
|
100
|
+
=== RELATÓRIO DE COMPARAÇÃO DE PACOTES ===
|
|
101
|
+
Pacote Base: versao_antiga.jar
|
|
102
|
+
Pacote Alvo: versao_nova.jar
|
|
103
|
+
==========================================
|
|
104
|
+
|
|
105
|
+
Total Adicionados: 0
|
|
106
|
+
Total Removidos: 0
|
|
107
|
+
Total Modificados: 1
|
|
108
|
+
Total Inalterados: 7
|
|
109
|
+
------------------------------------------
|
|
110
|
+
|
|
111
|
+
[~] ARQUIVOS MODIFICADOS (Atenção - Possíveis Conflitos):
|
|
112
|
+
br/com/mv/editor/dto/PaguObjetoDTO.class (1.81 KB → 2.39 KB | +602 B)
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
### 2. Visualizando Diferenças Detalhadas Estilo Git (`--diff / -d`)
|
|
118
|
+
|
|
119
|
+
Para inspecionar o conteúdo exato das alterações (linhas adicionadas `+` e removidas `-`), utilize a flag `-d` ou `--diff`:
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
python main.py --base "original/pacote.jar" \
|
|
123
|
+
--alvo "modificado/pacote.jar" \
|
|
124
|
+
--diff
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
**Exemplo de saída com diff unificado colorido:**
|
|
128
|
+
```diff
|
|
129
|
+
[~] ARQUIVOS MODIFICADOS (Atenção - Possíveis Conflitos):
|
|
130
|
+
br/com/mv/editor/dto/PaguObjetoDTO.class (1.81 KB → 2.39 KB | +602 B)
|
|
131
|
+
diff --git a/br/com/mv/editor/dto/PaguObjetoDTO.class b/br/com/mv/editor/dto/PaguObjetoDTO.class
|
|
132
|
+
--- a/br/com/mv/editor/dto/PaguObjetoDTO.class
|
|
133
|
+
+++ b/br/com/mv/editor/dto/PaguObjetoDTO.class
|
|
134
|
+
@@ -94,4 +94,20 @@
|
|
135
|
+
0: aload_0
|
|
136
|
+
1: invokevirtual #14 // Method toEntity:()Lbr/com/mv/sma/entidades/PaguObjeto;
|
|
137
|
+
4: areturn
|
|
138
|
+
+
|
|
139
|
+
+ public java.lang.String getCdObjetoENome();
|
|
140
|
+
+ Code:
|
|
141
|
+
+ 0: new #72 // class java/lang/StringBuilder
|
|
142
|
+
+ 3: dup
|
|
143
|
+
+ 4: invokespecial #78 // Method java/lang/StringBuilder."<init>":()V
|
|
144
|
+
+ 7: aload_0
|
|
145
|
+
+ 8: invokevirtual #96 // Method br/com/mv/editor/dto/PaguObjetoDTO.getCdObjeto:()Ljava/lang/Long;
|
|
146
|
+
+ 11: invokevirtual #82 // Method java/lang/StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
|
|
147
|
+
+ 14: ldc_w #108 // String -
|
|
148
|
+
+ 17: invokevirtual #86 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
|
|
149
|
+
+ 20: aload_0
|
|
150
|
+
+ 21: invokevirtual #102 // Method br/com/mv/editor/dto/PaguObjetoDTO.getNmObjeto:()Ljava/lang/String;
|
|
151
|
+
+ 24: invokevirtual #86 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
|
|
152
|
+
+ 27: invokevirtual #90 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
|
|
153
|
+
+ 30: areturn
|
|
154
|
+
}
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
> **Dica:** O diff também é automaticamente incorporado aos relatórios exportados em Markdown e HTML quando a flag `--diff` for utilizada junto com `--md` ou `--html`.
|
|
158
|
+
> No PowerShell (Windows), para quebrar linhas em comandos use o caractere de acento grave (`` ` ``) em vez da barra invertida (`\`).
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
### 3. Exportando Relatórios (JSON, Markdown e HTML)
|
|
163
|
+
|
|
164
|
+
Você pode gerar relatórios em um ou mais formatos simultaneamente:
|
|
165
|
+
|
|
166
|
+
```bash
|
|
167
|
+
python main.py --base "original/pacote.jar" \
|
|
168
|
+
--alvo "modificado/pacote.jar" \
|
|
169
|
+
--diff \
|
|
170
|
+
--json relatorio.json \
|
|
171
|
+
--md relatorio.md \
|
|
172
|
+
--html relatorio.html
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
### 4. Ignorando Metadados ou Padrões Específicos
|
|
178
|
+
|
|
179
|
+
Para evitar falsos positivos gerados por manifests de build ou documentação:
|
|
180
|
+
|
|
181
|
+
```bash
|
|
182
|
+
python main.py --base "pacote_v1.jar" \
|
|
183
|
+
--alvo "pacote_v2.jar" \
|
|
184
|
+
-i "META-INF/*" \
|
|
185
|
+
-i "*.properties"
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
### 5. Modo Verboso e Controle de Limite de Exibição
|
|
191
|
+
|
|
192
|
+
Por padrão, a CLI exibe no máximo 10 arquivos por categoria no console para evitar poluição. Para ver todos os arquivos:
|
|
193
|
+
|
|
194
|
+
```bash
|
|
195
|
+
# Exibe todos os arquivos no terminal sem paginação
|
|
196
|
+
python main.py --base "base.jar" --alvo "alvo.jar" --verbose
|
|
197
|
+
|
|
198
|
+
# Ou configure um limite personalizado (ex: 25 itens)
|
|
199
|
+
python main.py --base "base.jar" --alvo "alvo.jar" --limite 25
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
### 6. Integração Contínua (CI/CD)
|
|
205
|
+
|
|
206
|
+
Use a flag `--fail-on-conflict` para interromper scripts de automação se houver alterações inesperadas:
|
|
207
|
+
|
|
208
|
+
```bash
|
|
209
|
+
python main.py --base "base.jar" --alvo "alvo.jar" --fail-on-conflict
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
#### Códigos de Saída (Exit Codes):
|
|
213
|
+
| Código | Significado |
|
|
214
|
+
| :---: | :--- |
|
|
215
|
+
| `0` | Sucesso (análise concluída sem conflitos críticos). |
|
|
216
|
+
| `1` | Erro de execução (arquivo não encontrado, ZIP corrompido, argumentos inválidos). |
|
|
217
|
+
| `2` | Conflito detectado (quando executado com a flag `--fail-on-conflict`). |
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
## 📖 Referência de Parâmetros da CLI
|
|
222
|
+
|
|
223
|
+
| Parâmetro | Tipo | Descrição |
|
|
224
|
+
| :--- | :---: | :--- |
|
|
225
|
+
| `--base` | `string` | **Obrigatório.** Caminho para o pacote base de referência. |
|
|
226
|
+
| `--alvo` | `string` | **Obrigatório.** Caminho para o pacote alvo a ser comparado. |
|
|
227
|
+
| `-d`, `--diff` | `flag` | Exibe a diferença detalhada do conteúdo estilo Git (linhas adicionadas e removidas). |
|
|
228
|
+
| `-i`, `--ignorar` | `string` | Padrão glob de arquivos a ignorar (ex: `'META-INF/*'`). Pode ser repetido. |
|
|
229
|
+
| `-v`, `--verbose` | `flag` | Exibe a lista completa de arquivos no terminal sem limites. |
|
|
230
|
+
| `--limite` | `int` | Quantidade máxima de itens por categoria exibidos no terminal (padrão: `10`). |
|
|
231
|
+
| `--no-color` | `flag` | Desativa a coloração ANSI na saída do console. |
|
|
232
|
+
| `--json` | `string` | Caminho do arquivo para salvar o relatório em formato JSON. |
|
|
233
|
+
| `--md`, `--markdown` | `string` | Caminho do arquivo para salvar o relatório em formato Markdown. |
|
|
234
|
+
| `--html` | `string` | Caminho do arquivo para salvar o relatório visual em HTML. |
|
|
235
|
+
| `--fail-on-conflict` | `flag` | Encerra com código `2` caso haja arquivos modificados. |
|
|
236
|
+
| `-h`, `--help` | `flag` | Exibe a mensagem de ajuda com todos os comandos disponíveis. |
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
## 📁 Estrutura do Projeto
|
|
241
|
+
|
|
242
|
+
```text
|
|
243
|
+
cli/
|
|
244
|
+
├── analisador/ # Módulo principal da aplicação
|
|
245
|
+
│ ├── __init__.py # Exportação da API pública do módulo
|
|
246
|
+
│ ├── modelos.py # Entidades de dados (ArquivoInfo, ArquivoModificadoInfo, Relatorio)
|
|
247
|
+
│ ├── models.py # Alias de compatibilidade
|
|
248
|
+
│ ├── leitor.py # Leitura streaming de .jar/.zip e cálculo de SHA-256
|
|
249
|
+
│ ├── comparador.py # Motor de comparação de conjuntos e filtros
|
|
250
|
+
│ ├── diferenciador.py # Motor de diff unificado estilo Git e disassembly javap
|
|
251
|
+
│ ├── relatorio.py # Apresentador do relatório para terminal com cores ANSI
|
|
252
|
+
│ └── exportadores.py # Exportadores estruturados (JSON, Markdown, HTML)
|
|
253
|
+
├── tests/ # Suíte de testes automatizados
|
|
254
|
+
│ ├── __init__.py
|
|
255
|
+
│ └── test_analisador.py # Testes unitários com unittest
|
|
256
|
+
├── main.py # Ponto de entrada da CLI (CLI Controller)
|
|
257
|
+
├── .gitignore # Configurações de exclusão do Git
|
|
258
|
+
└── README.md # Documentação do projeto
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
---
|
|
262
|
+
|
|
263
|
+
## 🧪 Executando os Testes
|
|
264
|
+
|
|
265
|
+
Para rodar todos os testes automatizados:
|
|
266
|
+
|
|
267
|
+
```bash
|
|
268
|
+
python -m unittest discover tests
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
Para rodar em modo detalhado (verbose):
|
|
272
|
+
|
|
273
|
+
```bash
|
|
274
|
+
python -m unittest discover tests -v
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
---
|
|
278
|
+
|
|
279
|
+
## 📄 Licença
|
|
280
|
+
|
|
281
|
+
Este projeto é disponibilizado sob a licença [MIT](https://opensource.org/licenses/MIT).
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
# 📦 Analisador de Pacotes (.jar / .zip)
|
|
2
|
+
|
|
3
|
+
Uma ferramenta de linha de comando (CLI) em Python de alta performance para inspeção, auditoria e comparação de pacotes compactados (`.jar`, `.war`, `.zip`). Desenvolvida para detectar conflitos, arquivos alterados, adições e remoções entre versões de artefatos de release, patches e bibliotecas.
|
|
4
|
+
|
|
5
|
+
Zero dependências externas: construída exclusivamente com a **biblioteca padrão do Python**.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 🚀 Funcionalidades
|
|
10
|
+
|
|
11
|
+
* ⚡ **Leitura Otimizada em Streaming**: Processa pacotes lendo blocos de 64KB sob demanda, permitindo analisar arquivos pesados com consumo mínimo de memória RAM.
|
|
12
|
+
* 🔒 **Verificação de Integridade (SHA-256)**: Compara o hash SHA-256 de cada arquivo interno para garantir a detecção exata de modificações lógicas, mesmo quando as datas de modificação ou atributos forem alterados.
|
|
13
|
+
* 📊 **Cálculo de Variação (Delta)**: Exibe a diferença de tamanho (em bytes, KB, MB) para cada arquivo modificado (ex: `1.81 KB → 2.39 KB | +602 B`).
|
|
14
|
+
* 🔍 **Diff no Estilo Git (`-d / --diff`)**:
|
|
15
|
+
* Mostra as linhas adicionadas (`+`) e removidas (`-`) em arquivos modificados, novos e deletados.
|
|
16
|
+
* Suporta arquivos de texto puro (XML, JSON, properties, YAML, SQL, código-fonte, etc.).
|
|
17
|
+
* **Desmontagem de Bytecode Java (.class)**: Se o utilitário `javap` estiver instalado no sistema, desmonta automaticamente os arquivos `.class` e compara as assinaturas de métodos e atributos no estilo Git.
|
|
18
|
+
* 🎯 **Filtro de Exclusão com Padrões Glob (`-i / --ignorar`)**: Permite ignorar metadados voláteis como `META-INF/*`, arquivos de documentação (`*.md`) ou logs.
|
|
19
|
+
* 📄 **Múltiplos Formatos de Relatório**:
|
|
20
|
+
* **Console (Terminal)**: Colorido via ANSI com modo compacto ou verboso (`--verbose`).
|
|
21
|
+
* **JSON (`--json`)**: Estruturado com metadados e totais, ideal para integrações e APIs.
|
|
22
|
+
* **Markdown (`--markdown / --md`)**: Tabelas prontas para documentação ou Pull Requests.
|
|
23
|
+
* **HTML (`--html`)**: Dashboard visual moderno, responsivo e 100% autossuficiente (sem dependências externas).
|
|
24
|
+
* 🤖 **Pronto para CI/CD (`--fail-on-conflict`)**: Retorna código de saída `2` se detectar arquivos conflitantes/modificados, permitindo travar esteiras de deploy indesejadas.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## 📋 Requisitos
|
|
29
|
+
|
|
30
|
+
* **Python 3.8+** (compatível com Linux, macOS e Windows).
|
|
31
|
+
* Nenhuma biblioteca externa necessária (`pip install` desnecessário).
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## 🛠️ Instalação e Configuração
|
|
36
|
+
|
|
37
|
+
Clone o repositório ou copie os arquivos para sua máquina:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
git clone https://github.com/matheusbraga-dev/safepatch.git
|
|
41
|
+
cd cli
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Para validar a integridade da instalação, execute a suíte de testes:
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
python -m unittest discover tests
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## 💻 Guia de Uso
|
|
53
|
+
|
|
54
|
+
### 1. Comparação Básica
|
|
55
|
+
|
|
56
|
+
Para comparar dois pacotes `.jar` ou `.zip`:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
python main.py --base "caminho/para/versao_antiga.jar" --alvo "caminho/para/versao_nova.jar"
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
**Exemplo de saída no terminal:**
|
|
63
|
+
```text
|
|
64
|
+
Iniciando varredura dos pacotes...
|
|
65
|
+
Lendo pacote base: versao_antiga.jar...
|
|
66
|
+
Lendo pacote alvo: versao_nova.jar...
|
|
67
|
+
Analisando diferenças e detectando conflitos...
|
|
68
|
+
|
|
69
|
+
=== RELATÓRIO DE COMPARAÇÃO DE PACOTES ===
|
|
70
|
+
Pacote Base: versao_antiga.jar
|
|
71
|
+
Pacote Alvo: versao_nova.jar
|
|
72
|
+
==========================================
|
|
73
|
+
|
|
74
|
+
Total Adicionados: 0
|
|
75
|
+
Total Removidos: 0
|
|
76
|
+
Total Modificados: 1
|
|
77
|
+
Total Inalterados: 7
|
|
78
|
+
------------------------------------------
|
|
79
|
+
|
|
80
|
+
[~] ARQUIVOS MODIFICADOS (Atenção - Possíveis Conflitos):
|
|
81
|
+
br/com/mv/editor/dto/PaguObjetoDTO.class (1.81 KB → 2.39 KB | +602 B)
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
### 2. Visualizando Diferenças Detalhadas Estilo Git (`--diff / -d`)
|
|
87
|
+
|
|
88
|
+
Para inspecionar o conteúdo exato das alterações (linhas adicionadas `+` e removidas `-`), utilize a flag `-d` ou `--diff`:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
python main.py --base "original/pacote.jar" \
|
|
92
|
+
--alvo "modificado/pacote.jar" \
|
|
93
|
+
--diff
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
**Exemplo de saída com diff unificado colorido:**
|
|
97
|
+
```diff
|
|
98
|
+
[~] ARQUIVOS MODIFICADOS (Atenção - Possíveis Conflitos):
|
|
99
|
+
br/com/mv/editor/dto/PaguObjetoDTO.class (1.81 KB → 2.39 KB | +602 B)
|
|
100
|
+
diff --git a/br/com/mv/editor/dto/PaguObjetoDTO.class b/br/com/mv/editor/dto/PaguObjetoDTO.class
|
|
101
|
+
--- a/br/com/mv/editor/dto/PaguObjetoDTO.class
|
|
102
|
+
+++ b/br/com/mv/editor/dto/PaguObjetoDTO.class
|
|
103
|
+
@@ -94,4 +94,20 @@
|
|
104
|
+
0: aload_0
|
|
105
|
+
1: invokevirtual #14 // Method toEntity:()Lbr/com/mv/sma/entidades/PaguObjeto;
|
|
106
|
+
4: areturn
|
|
107
|
+
+
|
|
108
|
+
+ public java.lang.String getCdObjetoENome();
|
|
109
|
+
+ Code:
|
|
110
|
+
+ 0: new #72 // class java/lang/StringBuilder
|
|
111
|
+
+ 3: dup
|
|
112
|
+
+ 4: invokespecial #78 // Method java/lang/StringBuilder."<init>":()V
|
|
113
|
+
+ 7: aload_0
|
|
114
|
+
+ 8: invokevirtual #96 // Method br/com/mv/editor/dto/PaguObjetoDTO.getCdObjeto:()Ljava/lang/Long;
|
|
115
|
+
+ 11: invokevirtual #82 // Method java/lang/StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
|
|
116
|
+
+ 14: ldc_w #108 // String -
|
|
117
|
+
+ 17: invokevirtual #86 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
|
|
118
|
+
+ 20: aload_0
|
|
119
|
+
+ 21: invokevirtual #102 // Method br/com/mv/editor/dto/PaguObjetoDTO.getNmObjeto:()Ljava/lang/String;
|
|
120
|
+
+ 24: invokevirtual #86 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
|
|
121
|
+
+ 27: invokevirtual #90 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
|
|
122
|
+
+ 30: areturn
|
|
123
|
+
}
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
> **Dica:** O diff também é automaticamente incorporado aos relatórios exportados em Markdown e HTML quando a flag `--diff` for utilizada junto com `--md` ou `--html`.
|
|
127
|
+
> No PowerShell (Windows), para quebrar linhas em comandos use o caractere de acento grave (`` ` ``) em vez da barra invertida (`\`).
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
### 3. Exportando Relatórios (JSON, Markdown e HTML)
|
|
132
|
+
|
|
133
|
+
Você pode gerar relatórios em um ou mais formatos simultaneamente:
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
python main.py --base "original/pacote.jar" \
|
|
137
|
+
--alvo "modificado/pacote.jar" \
|
|
138
|
+
--diff \
|
|
139
|
+
--json relatorio.json \
|
|
140
|
+
--md relatorio.md \
|
|
141
|
+
--html relatorio.html
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
### 4. Ignorando Metadados ou Padrões Específicos
|
|
147
|
+
|
|
148
|
+
Para evitar falsos positivos gerados por manifests de build ou documentação:
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
python main.py --base "pacote_v1.jar" \
|
|
152
|
+
--alvo "pacote_v2.jar" \
|
|
153
|
+
-i "META-INF/*" \
|
|
154
|
+
-i "*.properties"
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
### 5. Modo Verboso e Controle de Limite de Exibição
|
|
160
|
+
|
|
161
|
+
Por padrão, a CLI exibe no máximo 10 arquivos por categoria no console para evitar poluição. Para ver todos os arquivos:
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
# Exibe todos os arquivos no terminal sem paginação
|
|
165
|
+
python main.py --base "base.jar" --alvo "alvo.jar" --verbose
|
|
166
|
+
|
|
167
|
+
# Ou configure um limite personalizado (ex: 25 itens)
|
|
168
|
+
python main.py --base "base.jar" --alvo "alvo.jar" --limite 25
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
### 6. Integração Contínua (CI/CD)
|
|
174
|
+
|
|
175
|
+
Use a flag `--fail-on-conflict` para interromper scripts de automação se houver alterações inesperadas:
|
|
176
|
+
|
|
177
|
+
```bash
|
|
178
|
+
python main.py --base "base.jar" --alvo "alvo.jar" --fail-on-conflict
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
#### Códigos de Saída (Exit Codes):
|
|
182
|
+
| Código | Significado |
|
|
183
|
+
| :---: | :--- |
|
|
184
|
+
| `0` | Sucesso (análise concluída sem conflitos críticos). |
|
|
185
|
+
| `1` | Erro de execução (arquivo não encontrado, ZIP corrompido, argumentos inválidos). |
|
|
186
|
+
| `2` | Conflito detectado (quando executado com a flag `--fail-on-conflict`). |
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
## 📖 Referência de Parâmetros da CLI
|
|
191
|
+
|
|
192
|
+
| Parâmetro | Tipo | Descrição |
|
|
193
|
+
| :--- | :---: | :--- |
|
|
194
|
+
| `--base` | `string` | **Obrigatório.** Caminho para o pacote base de referência. |
|
|
195
|
+
| `--alvo` | `string` | **Obrigatório.** Caminho para o pacote alvo a ser comparado. |
|
|
196
|
+
| `-d`, `--diff` | `flag` | Exibe a diferença detalhada do conteúdo estilo Git (linhas adicionadas e removidas). |
|
|
197
|
+
| `-i`, `--ignorar` | `string` | Padrão glob de arquivos a ignorar (ex: `'META-INF/*'`). Pode ser repetido. |
|
|
198
|
+
| `-v`, `--verbose` | `flag` | Exibe a lista completa de arquivos no terminal sem limites. |
|
|
199
|
+
| `--limite` | `int` | Quantidade máxima de itens por categoria exibidos no terminal (padrão: `10`). |
|
|
200
|
+
| `--no-color` | `flag` | Desativa a coloração ANSI na saída do console. |
|
|
201
|
+
| `--json` | `string` | Caminho do arquivo para salvar o relatório em formato JSON. |
|
|
202
|
+
| `--md`, `--markdown` | `string` | Caminho do arquivo para salvar o relatório em formato Markdown. |
|
|
203
|
+
| `--html` | `string` | Caminho do arquivo para salvar o relatório visual em HTML. |
|
|
204
|
+
| `--fail-on-conflict` | `flag` | Encerra com código `2` caso haja arquivos modificados. |
|
|
205
|
+
| `-h`, `--help` | `flag` | Exibe a mensagem de ajuda com todos os comandos disponíveis. |
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## 📁 Estrutura do Projeto
|
|
210
|
+
|
|
211
|
+
```text
|
|
212
|
+
cli/
|
|
213
|
+
├── analisador/ # Módulo principal da aplicação
|
|
214
|
+
│ ├── __init__.py # Exportação da API pública do módulo
|
|
215
|
+
│ ├── modelos.py # Entidades de dados (ArquivoInfo, ArquivoModificadoInfo, Relatorio)
|
|
216
|
+
│ ├── models.py # Alias de compatibilidade
|
|
217
|
+
│ ├── leitor.py # Leitura streaming de .jar/.zip e cálculo de SHA-256
|
|
218
|
+
│ ├── comparador.py # Motor de comparação de conjuntos e filtros
|
|
219
|
+
│ ├── diferenciador.py # Motor de diff unificado estilo Git e disassembly javap
|
|
220
|
+
│ ├── relatorio.py # Apresentador do relatório para terminal com cores ANSI
|
|
221
|
+
│ └── exportadores.py # Exportadores estruturados (JSON, Markdown, HTML)
|
|
222
|
+
├── tests/ # Suíte de testes automatizados
|
|
223
|
+
│ ├── __init__.py
|
|
224
|
+
│ └── test_analisador.py # Testes unitários com unittest
|
|
225
|
+
├── main.py # Ponto de entrada da CLI (CLI Controller)
|
|
226
|
+
├── .gitignore # Configurações de exclusão do Git
|
|
227
|
+
└── README.md # Documentação do projeto
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
---
|
|
231
|
+
|
|
232
|
+
## 🧪 Executando os Testes
|
|
233
|
+
|
|
234
|
+
Para rodar todos os testes automatizados:
|
|
235
|
+
|
|
236
|
+
```bash
|
|
237
|
+
python -m unittest discover tests
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
Para rodar em modo detalhado (verbose):
|
|
241
|
+
|
|
242
|
+
```bash
|
|
243
|
+
python -m unittest discover tests -v
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
## 📄 Licença
|
|
249
|
+
|
|
250
|
+
Este projeto é disponibilizado sob a licença [MIT](https://opensource.org/licenses/MIT).
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
from .modelos import ArquivoInfo, ArquivoModificadoInfo, RelatorioComparacao, formatar_bytes
|
|
2
|
+
from .leitor import LeitorPacote
|
|
3
|
+
from .comparador import ComparadorPacotes
|
|
4
|
+
from .relatorio import GeradorRelatorioConsole
|
|
5
|
+
from .exportadores import ExportadorJSON, ExportadorMarkdown, ExportadorHTML
|
|
6
|
+
from .diferenciador import DiferenciadorConteudo
|
|
7
|
+
|
|
8
|
+
__all__ = [
|
|
9
|
+
"ArquivoInfo",
|
|
10
|
+
"ArquivoModificadoInfo",
|
|
11
|
+
"RelatorioComparacao",
|
|
12
|
+
"formatar_bytes",
|
|
13
|
+
"LeitorPacote",
|
|
14
|
+
"ComparadorPacotes",
|
|
15
|
+
"GeradorRelatorioConsole",
|
|
16
|
+
"ExportadorJSON",
|
|
17
|
+
"ExportadorMarkdown",
|
|
18
|
+
"ExportadorHTML",
|
|
19
|
+
"DiferenciadorConteudo",
|
|
20
|
+
]
|
|
Binary file
|