abapgit-agent 1.5.0 → 1.6.1
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.
- package/README.md +1 -0
- package/abap/guidelines/00_index.md +36 -0
- package/abap/guidelines/01_sql.md +88 -0
- package/abap/guidelines/02_exceptions.md +176 -0
- package/abap/guidelines/03_testing.md +269 -0
- package/abap/guidelines/04_cds.md +136 -0
- package/abap/guidelines/05_classes.md +58 -0
- package/abap/guidelines/06_objects.md +110 -0
- package/abap/guidelines/07_json.md +24 -0
- package/abap/guidelines/08_abapgit.md +222 -0
- package/abap/guidelines/09_unit_testable_code.md +568 -0
- package/bin/abapgit-agent +513 -38
- package/bin/abgagt +24 -0
- package/package.json +8 -2
- package/src/abap-client.js +65 -2
- package/src/agent.js +57 -3
- package/src/config.js +1 -1
- package/src/ref-search.js +1037 -0
- package/.abapGitAgent.example +0 -11
- package/.github/workflows/release.yml +0 -60
- package/API.md +0 -710
- package/CLAUDE.md +0 -1058
- package/CLAUDE_MEM.md +0 -88
- package/ERROR_HANDLING.md +0 -30
- package/INSTALL.md +0 -155
- package/RELEASE_NOTES.md +0 -143
- package/abap/CLAUDE.md +0 -1010
- package/abap/copilot-instructions.md +0 -79
- package/abap/package.devc.xml +0 -10
- package/abap/zcl_abgagt_agent.clas.abap +0 -420
- package/abap/zcl_abgagt_agent.clas.xml +0 -15
- package/abap/zcl_abgagt_cmd_factory.clas.abap +0 -48
- package/abap/zcl_abgagt_cmd_factory.clas.xml +0 -15
- package/abap/zcl_abgagt_command_create.clas.abap +0 -95
- package/abap/zcl_abgagt_command_create.clas.xml +0 -15
- package/abap/zcl_abgagt_command_import.clas.abap +0 -138
- package/abap/zcl_abgagt_command_import.clas.xml +0 -15
- package/abap/zcl_abgagt_command_inspect.clas.abap +0 -456
- package/abap/zcl_abgagt_command_inspect.clas.testclasses.abap +0 -121
- package/abap/zcl_abgagt_command_inspect.clas.xml +0 -16
- package/abap/zcl_abgagt_command_preview.clas.abap +0 -386
- package/abap/zcl_abgagt_command_preview.clas.xml +0 -15
- package/abap/zcl_abgagt_command_pull.clas.abap +0 -80
- package/abap/zcl_abgagt_command_pull.clas.testclasses.abap +0 -87
- package/abap/zcl_abgagt_command_pull.clas.xml +0 -16
- package/abap/zcl_abgagt_command_tree.clas.abap +0 -237
- package/abap/zcl_abgagt_command_tree.clas.xml +0 -15
- package/abap/zcl_abgagt_command_unit.clas.abap +0 -297
- package/abap/zcl_abgagt_command_unit.clas.xml +0 -15
- package/abap/zcl_abgagt_command_view.clas.abap +0 -240
- package/abap/zcl_abgagt_command_view.clas.xml +0 -15
- package/abap/zcl_abgagt_resource_create.clas.abap +0 -71
- package/abap/zcl_abgagt_resource_create.clas.xml +0 -15
- package/abap/zcl_abgagt_resource_health.clas.abap +0 -25
- package/abap/zcl_abgagt_resource_health.clas.xml +0 -15
- package/abap/zcl_abgagt_resource_import.clas.abap +0 -66
- package/abap/zcl_abgagt_resource_import.clas.xml +0 -15
- package/abap/zcl_abgagt_resource_inspect.clas.abap +0 -63
- package/abap/zcl_abgagt_resource_inspect.clas.xml +0 -15
- package/abap/zcl_abgagt_resource_preview.clas.abap +0 -67
- package/abap/zcl_abgagt_resource_preview.clas.xml +0 -15
- package/abap/zcl_abgagt_resource_pull.clas.abap +0 -71
- package/abap/zcl_abgagt_resource_pull.clas.xml +0 -15
- package/abap/zcl_abgagt_resource_tree.clas.abap +0 -70
- package/abap/zcl_abgagt_resource_tree.clas.xml +0 -15
- package/abap/zcl_abgagt_resource_unit.clas.abap +0 -64
- package/abap/zcl_abgagt_resource_unit.clas.xml +0 -15
- package/abap/zcl_abgagt_resource_view.clas.abap +0 -68
- package/abap/zcl_abgagt_resource_view.clas.xml +0 -15
- package/abap/zcl_abgagt_rest_handler.clas.abap +0 -32
- package/abap/zcl_abgagt_rest_handler.clas.xml +0 -15
- package/abap/zcl_abgagt_util.clas.abap +0 -93
- package/abap/zcl_abgagt_util.clas.testclasses.abap +0 -84
- package/abap/zcl_abgagt_util.clas.xml +0 -16
- package/abap/zcl_abgagt_viewer_clas.clas.abap +0 -58
- package/abap/zcl_abgagt_viewer_clas.clas.xml +0 -15
- package/abap/zcl_abgagt_viewer_ddls.clas.abap +0 -83
- package/abap/zcl_abgagt_viewer_ddls.clas.xml +0 -15
- package/abap/zcl_abgagt_viewer_dtel.clas.abap +0 -98
- package/abap/zcl_abgagt_viewer_dtel.clas.xml +0 -15
- package/abap/zcl_abgagt_viewer_factory.clas.abap +0 -41
- package/abap/zcl_abgagt_viewer_factory.clas.xml +0 -15
- package/abap/zcl_abgagt_viewer_intf.clas.abap +0 -58
- package/abap/zcl_abgagt_viewer_intf.clas.xml +0 -15
- package/abap/zcl_abgagt_viewer_stru.clas.abap +0 -59
- package/abap/zcl_abgagt_viewer_stru.clas.xml +0 -15
- package/abap/zcl_abgagt_viewer_tabl.clas.abap +0 -59
- package/abap/zcl_abgagt_viewer_tabl.clas.xml +0 -15
- package/abap/zcl_abgagt_viewer_ttyp.clas.abap +0 -93
- package/abap/zcl_abgagt_viewer_ttyp.clas.xml +0 -15
- package/abap/zif_abgagt_agent.intf.abap +0 -53
- package/abap/zif_abgagt_agent.intf.xml +0 -15
- package/abap/zif_abgagt_cmd_factory.intf.abap +0 -7
- package/abap/zif_abgagt_cmd_factory.intf.xml +0 -15
- package/abap/zif_abgagt_command.intf.abap +0 -26
- package/abap/zif_abgagt_command.intf.xml +0 -15
- package/abap/zif_abgagt_util.intf.abap +0 -28
- package/abap/zif_abgagt_util.intf.xml +0 -15
- package/abap/zif_abgagt_viewer.intf.abap +0 -12
- package/abap/zif_abgagt_viewer.intf.xml +0 -15
- package/docs/commands.md +0 -142
- package/docs/create-command.md +0 -129
- package/docs/health-command.md +0 -89
- package/docs/import-command.md +0 -195
- package/docs/init-command.md +0 -189
- package/docs/inspect-command.md +0 -169
- package/docs/list-command.md +0 -289
- package/docs/preview-command.md +0 -528
- package/docs/pull-command.md +0 -202
- package/docs/status-command.md +0 -68
- package/docs/tree-command.md +0 -303
- package/docs/unit-command.md +0 -167
- package/docs/view-command.md +0 -501
- package/img/claude.png +0 -0
- package/scripts/claude-integration.js +0 -351
- package/scripts/release.js +0 -298
- package/scripts/release.sh +0 -60
- package/scripts/test-integration.js +0 -139
- package/scripts/unrelease.js +0 -277
package/docs/pull-command.md
DELETED
|
@@ -1,202 +0,0 @@
|
|
|
1
|
-
# pull Command Requirements
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
|
|
5
|
-
Pull and activate ABAP objects from git repository.
|
|
6
|
-
|
|
7
|
-
## Command
|
|
8
|
-
|
|
9
|
-
```bash
|
|
10
|
-
# Auto-detect git remote and branch from current directory
|
|
11
|
-
abapgit-agent pull
|
|
12
|
-
|
|
13
|
-
# Pull specific files only (fast)
|
|
14
|
-
abapgit-agent pull --files zcl_my_class.clas.abap,zcl_other.clas.abap
|
|
15
|
-
|
|
16
|
-
# Pull from specific branch
|
|
17
|
-
abapgit-agent pull --branch develop
|
|
18
|
-
|
|
19
|
-
# Pull from specific URL
|
|
20
|
-
abapgit-agent pull --url https://github.com/org/repo.git
|
|
21
|
-
|
|
22
|
-
# With transport request
|
|
23
|
-
abapgit-agent pull --transport DEVK900001
|
|
24
|
-
|
|
25
|
-
# Combined options
|
|
26
|
-
abapgit-agent pull --branch develop --files src/zcl_my_class.clas.abap --transport DEVK900001
|
|
27
|
-
|
|
28
|
-
# Using transport from config/environment (no --transport flag needed)
|
|
29
|
-
abapgit-agent pull
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
## Prerequisite
|
|
33
|
-
|
|
34
|
-
- Current folder is git repo root (unless `--url` specified)
|
|
35
|
-
- Git remote is configured (unless `--url` specified)
|
|
36
|
-
- `.abapGitAgent` exists with valid credentials
|
|
37
|
-
|
|
38
|
-
## Parameters
|
|
39
|
-
|
|
40
|
-
| Parameter | Required | Description |
|
|
41
|
-
|-----------|----------|-------------|
|
|
42
|
-
| `--url` | No | Git repository URL (auto-detected if not specified) |
|
|
43
|
-
| `--branch` | No | Branch name (default: current branch) |
|
|
44
|
-
| `--files` | No | Comma-separated list of files to pull |
|
|
45
|
-
| `--transport` | No | Transport request (config/env takes priority if not specified) |
|
|
46
|
-
|
|
47
|
-
## Transport Request Precedence
|
|
48
|
-
|
|
49
|
-
The transport request is determined in this order:
|
|
50
|
-
|
|
51
|
-
| Priority | Source | Example |
|
|
52
|
-
|----------|--------|---------|
|
|
53
|
-
| 1 | CLI `--transport` argument | `--transport DEVK900001` |
|
|
54
|
-
| 2 | Config file `transport` | `"transport": "DEVK900001"` in `.abapGitAgent` |
|
|
55
|
-
| 3 | Environment variable `ABAP_TRANSPORT` | `export ABAP_TRANSPORT="DEVK900001"` |
|
|
56
|
-
| 4 (default) | Not set | abapGit creates/uses default |
|
|
57
|
-
|
|
58
|
-
---
|
|
59
|
-
|
|
60
|
-
## Tasks
|
|
61
|
-
|
|
62
|
-
### 1. Detect Git Remote URL
|
|
63
|
-
|
|
64
|
-
```bash
|
|
65
|
-
git remote get-url origin
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
### 2. Detect Current Branch
|
|
69
|
-
|
|
70
|
-
```bash
|
|
71
|
-
git branch --show-current
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
Or from `.git/HEAD`
|
|
75
|
-
|
|
76
|
-
### 3. Load Configuration
|
|
77
|
-
|
|
78
|
-
Read `.abapGitAgent` for credentials
|
|
79
|
-
|
|
80
|
-
### 4. Fetch CSRF Token
|
|
81
|
-
|
|
82
|
-
```bash
|
|
83
|
-
GET /health (with X-CSRF-Token: fetch)
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
### 5. Make Pull Request
|
|
87
|
-
|
|
88
|
-
**Endpoint:** `POST /pull`
|
|
89
|
-
|
|
90
|
-
**Request Body:**
|
|
91
|
-
```json
|
|
92
|
-
{
|
|
93
|
-
"url": "https://github.com/org/repo.git",
|
|
94
|
-
"branch": "main",
|
|
95
|
-
"username": "git-user",
|
|
96
|
-
"password": "git-token",
|
|
97
|
-
"files": ["zcl_my_class.clas.abap"],
|
|
98
|
-
"transport_request": "DEVK900001"
|
|
99
|
-
}
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
### 6. Display Results
|
|
103
|
-
|
|
104
|
-
---
|
|
105
|
-
|
|
106
|
-
## Output
|
|
107
|
-
|
|
108
|
-
### Success
|
|
109
|
-
|
|
110
|
-
```
|
|
111
|
-
✅ Pull completed successfully!
|
|
112
|
-
Job ID: CAIS20260208115649
|
|
113
|
-
Message: Pull completed successfully
|
|
114
|
-
|
|
115
|
-
📋 Pull Log (N messages):
|
|
116
|
-
────────────────────────────────────────────────────────────────────────────────
|
|
117
|
-
Icon │Object │Message
|
|
118
|
-
─────┼────────────────────────────┼─────────────────────────────────────────
|
|
119
|
-
✅ │CLAS ZCL_MY_CLASS │Object ZCL_MY_CLASS imported
|
|
120
|
-
...
|
|
121
|
-
|
|
122
|
-
📦 Activated Objects (N):
|
|
123
|
-
────────────────────────────────────────────────────────────────────────────────
|
|
124
|
-
✅ CLAS ZCL_MY_CLASS
|
|
125
|
-
...
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
### With Errors
|
|
129
|
-
|
|
130
|
-
```
|
|
131
|
-
❌ Pull completed with errors!
|
|
132
|
-
Job ID: CAIS20260208115649
|
|
133
|
-
Message: Pull completed with errors
|
|
134
|
-
|
|
135
|
-
📋 Error Details:
|
|
136
|
-
────────────────────────────────────────────────────────────────────────────────
|
|
137
|
-
CLAS ZCL_MY_CLASS: Error updating where-used list
|
|
138
|
-
|
|
139
|
-
📋 Pull Log (N messages):
|
|
140
|
-
...
|
|
141
|
-
|
|
142
|
-
❌ Failed Objects Log (M entries):
|
|
143
|
-
────────────────────────────────────────────────────────────────────────────────
|
|
144
|
-
❌ CLAS ZCL_MY_CLASS: Error message text
|
|
145
|
-
Exception: Exception details
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
---
|
|
149
|
-
|
|
150
|
-
## File Format
|
|
151
|
-
|
|
152
|
-
Files are parsed to extract `(obj_type, obj_name)`:
|
|
153
|
-
|
|
154
|
-
| File Pattern | Object Type | Object Name |
|
|
155
|
-
|--------------|-------------|-------------|
|
|
156
|
-
| `zcl_my_class.clas.abap` | CLAS | ZCL_MY_CLASS |
|
|
157
|
-
| `zif_my_intf.intf.abap` | INTF | ZIF_MY_INTF |
|
|
158
|
-
| `src/zcl_my_class.clas.abap` | CLAS | ZCL_MY_CLASS |
|
|
159
|
-
|
|
160
|
-
---
|
|
161
|
-
|
|
162
|
-
## Response Structure
|
|
163
|
-
|
|
164
|
-
```json
|
|
165
|
-
{
|
|
166
|
-
"success": "X",
|
|
167
|
-
"job_id": "CAIS20260208115649",
|
|
168
|
-
"message": "Pull completed successfully",
|
|
169
|
-
"activated_count": 15,
|
|
170
|
-
"failed_count": 1,
|
|
171
|
-
"activated_objects": [
|
|
172
|
-
{ "obj_type": "CLAS", "obj_name": "ZCL_MY_CLASS" }
|
|
173
|
-
],
|
|
174
|
-
"failed_objects": [
|
|
175
|
-
{ "obj_type": "CLAS", "obj_name": "ZCL_OTHER", "text": "Error message" }
|
|
176
|
-
],
|
|
177
|
-
"log_messages": [...]
|
|
178
|
-
}
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
---
|
|
182
|
-
|
|
183
|
-
## Key Behaviors
|
|
184
|
-
|
|
185
|
-
1. **Activated Objects** - Only includes objects that completed successfully (no errors in log)
|
|
186
|
-
2. **Failed Objects Log** - Shows all error messages (duplicates allowed for multiple errors per object)
|
|
187
|
-
3. **Error Details** - When errors occur, displays error detail section at the top
|
|
188
|
-
|
|
189
|
-
---
|
|
190
|
-
|
|
191
|
-
## Example
|
|
192
|
-
|
|
193
|
-
```bash
|
|
194
|
-
# Full pull
|
|
195
|
-
abapgit-agent pull
|
|
196
|
-
|
|
197
|
-
# Fast pull - specific files
|
|
198
|
-
abapgit-agent pull --files abap/zcl_my_class.clas.abap
|
|
199
|
-
|
|
200
|
-
# With transport
|
|
201
|
-
abapgit-agent pull --files abap/zcl_my_class.clas.abap --transport DEVK900001
|
|
202
|
-
```
|
package/docs/status-command.md
DELETED
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
# status Command Requirements
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
|
|
5
|
-
Check if ABAP integration is configured for the current repository.
|
|
6
|
-
|
|
7
|
-
## Command
|
|
8
|
-
|
|
9
|
-
```bash
|
|
10
|
-
abapgit-agent status
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
## Tasks
|
|
14
|
-
|
|
15
|
-
### 1. Check Configuration File
|
|
16
|
-
|
|
17
|
-
Check if `.abapGitAgent` exists in current directory:
|
|
18
|
-
|
|
19
|
-
```bash
|
|
20
|
-
test -f .abapGitAgent
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
### 2. Display Status
|
|
24
|
-
|
|
25
|
-
| Status | Output |
|
|
26
|
-
|--------|--------|
|
|
27
|
-
| Configured | `✅ ABAP Git Agent is ENABLED` with config location |
|
|
28
|
-
| Not configured | `❌ ABAP Git Agent is NOT configured` |
|
|
29
|
-
|
|
30
|
-
---
|
|
31
|
-
|
|
32
|
-
## Output Examples
|
|
33
|
-
|
|
34
|
-
### Configured
|
|
35
|
-
|
|
36
|
-
```
|
|
37
|
-
✅ ABAP Git Agent is ENABLED
|
|
38
|
-
Config location: /path/to/repo/.abapGitAgent
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
### Not Configured
|
|
42
|
-
|
|
43
|
-
```
|
|
44
|
-
❌ ABAP Git Agent is NOT configured
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
---
|
|
48
|
-
|
|
49
|
-
## Used By
|
|
50
|
-
|
|
51
|
-
- `create` command - validates configuration exists before creating repo
|
|
52
|
-
|
|
53
|
-
## Related Files
|
|
54
|
-
|
|
55
|
-
| File | Description |
|
|
56
|
-
|------|-------------|
|
|
57
|
-
| `.abapGitAgent` | Configuration file with ABAP connection details |
|
|
58
|
-
| `.abapGitAgent.sample` | Template file |
|
|
59
|
-
|
|
60
|
-
---
|
|
61
|
-
|
|
62
|
-
## Example
|
|
63
|
-
|
|
64
|
-
```bash
|
|
65
|
-
$ abapgit-agent status
|
|
66
|
-
✅ ABAP Git Agent is ENABLED
|
|
67
|
-
Config location: /Users/user/project/.abapGitAgent
|
|
68
|
-
```
|
package/docs/tree-command.md
DELETED
|
@@ -1,303 +0,0 @@
|
|
|
1
|
-
# tree Command Requirements
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
|
|
5
|
-
Display the package hierarchy tree from an ABAP system, showing parent packages, sub-packages, and object counts.
|
|
6
|
-
|
|
7
|
-
## Command
|
|
8
|
-
|
|
9
|
-
```bash
|
|
10
|
-
# Basic usage
|
|
11
|
-
abapgit-agent tree --package $ZMY_PACKAGE
|
|
12
|
-
|
|
13
|
-
# With object breakdown
|
|
14
|
-
abapgit-agent tree --package $ZMY_PACKAGE --include-objects
|
|
15
|
-
|
|
16
|
-
# Limit depth
|
|
17
|
-
abapgit-agent tree --package $ZMY_PACKAGE --depth 3
|
|
18
|
-
|
|
19
|
-
# JSON output for scripting (pure machine-readable)
|
|
20
|
-
abapgit-agent tree --package $ZMY_PACKAGE --json
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
## Prerequisite
|
|
24
|
-
|
|
25
|
-
- `.abapGitAgent` exists with valid credentials
|
|
26
|
-
- Package must exist in the ABAP system
|
|
27
|
-
|
|
28
|
-
## Parameters
|
|
29
|
-
|
|
30
|
-
| Parameter | Required | Description |
|
|
31
|
-
|-----------|----------|-------------|
|
|
32
|
-
| `--package` | Yes | ABAP package name (e.g., `$ZMY_PACKAGE`, `ZMY_PACKAGE`) |
|
|
33
|
-
| `--depth` | No | Maximum depth to traverse (default: 3) |
|
|
34
|
-
| `--include-objects` | No | Include object counts breakdown |
|
|
35
|
-
| `--json` | No | Output raw JSON only (for scripting) |
|
|
36
|
-
|
|
37
|
-
---
|
|
38
|
-
|
|
39
|
-
## Tasks
|
|
40
|
-
|
|
41
|
-
### 1. Validate Parameters
|
|
42
|
-
|
|
43
|
-
- `--package` must be specified
|
|
44
|
-
- Package name must be valid (1-30 characters, start with letter or `$`)
|
|
45
|
-
|
|
46
|
-
### 2. Load Configuration
|
|
47
|
-
|
|
48
|
-
Read `.abapGitAgent` for credentials
|
|
49
|
-
|
|
50
|
-
### 3. Fetch CSRF Token
|
|
51
|
-
|
|
52
|
-
```bash
|
|
53
|
-
GET /health (with X-CSRF-Token: fetch)
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
### 4. Make Tree Request
|
|
57
|
-
|
|
58
|
-
**Endpoint:** `POST /tree`
|
|
59
|
-
|
|
60
|
-
**Request Body:**
|
|
61
|
-
```json
|
|
62
|
-
{
|
|
63
|
-
"package": "$ZMY_PACKAGE",
|
|
64
|
-
"depth": 3,
|
|
65
|
-
"include_objects": true
|
|
66
|
-
}
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
### 5. Display Results
|
|
70
|
-
|
|
71
|
-
---
|
|
72
|
-
|
|
73
|
-
## Output
|
|
74
|
-
|
|
75
|
-
### Basic Tree
|
|
76
|
-
|
|
77
|
-
```
|
|
78
|
-
🌳 Package Tree: $ZMAIN_PACKAGE
|
|
79
|
-
|
|
80
|
-
📦 $ZMAIN_PACKAGE (Main Package)
|
|
81
|
-
├─ 📦 $ZMAIN_SUB1 (Sub Package 1)
|
|
82
|
-
│ ├─ 📦 $ZMAIN_SUB1_A (Sub Package 1A)
|
|
83
|
-
│ └─ 📦 $ZMAIN_SUB1_B (Sub Package 1B)
|
|
84
|
-
└─ 📦 $ZMAIN_SUB2 (Sub Package 2)
|
|
85
|
-
└─ 📦 $ZMAIN_SUB2_A (Sub Package 2A)
|
|
86
|
-
|
|
87
|
-
📊 Summary
|
|
88
|
-
PACKAGES: 6
|
|
89
|
-
OBJECTS: 127
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
### With Object Counts
|
|
93
|
-
|
|
94
|
-
```
|
|
95
|
-
🌳 Package Tree: $ZMAIN_PACKAGE
|
|
96
|
-
|
|
97
|
-
📦 $ZMAIN_PACKAGE (Main Package)
|
|
98
|
-
├─ 📦 $ZMAIN_SUB1 (Sub Package 1)
|
|
99
|
-
│ ├─ 📦 $ZMAIN_SUB1_A (Sub Package 1A)
|
|
100
|
-
│ └─ 📦 $ZMAIN_SUB1_B (Sub Package 1B)
|
|
101
|
-
└─ 📦 $ZMAIN_SUB2 (Sub Package 2)
|
|
102
|
-
└─ 📦 $ZMAIN_SUB2_A (Sub Package 2A)
|
|
103
|
-
|
|
104
|
-
📊 Summary
|
|
105
|
-
PACKAGES: 6
|
|
106
|
-
OBJECTS: 127
|
|
107
|
-
TYPES: CLAS=10 INTF=2 PROG=11 FUGR=1 TABL=3
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
### With Parent Package
|
|
111
|
-
|
|
112
|
-
```
|
|
113
|
-
🌳 Package Tree: $ZMAIN_PACKAGE
|
|
114
|
-
|
|
115
|
-
⬆️ Parent: $ZSAP_BASE (SAP Base Package)
|
|
116
|
-
|
|
117
|
-
📦 $ZMAIN_PACKAGE (Main Package)
|
|
118
|
-
└─ 📦 $ZMAIN_SUB1 (Sub Package 1)
|
|
119
|
-
|
|
120
|
-
📊 Summary
|
|
121
|
-
PACKAGES: 2
|
|
122
|
-
OBJECTS: 15
|
|
123
|
-
TYPES: CLAS=5 PROG=10
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
### JSON Output
|
|
127
|
-
|
|
128
|
-
```json
|
|
129
|
-
{
|
|
130
|
-
"SUCCESS": true,
|
|
131
|
-
"COMMAND": "TREE",
|
|
132
|
-
"PACKAGE": "$ZMAIN_PACKAGE",
|
|
133
|
-
"MESSAGE": "Tree retrieved successfully",
|
|
134
|
-
"PARENT_PACKAGE": "$ZSAP_BASE",
|
|
135
|
-
"NODES": [
|
|
136
|
-
{
|
|
137
|
-
"PACKAGE": "$ZMAIN_PACKAGE",
|
|
138
|
-
"PARENT": "",
|
|
139
|
-
"DESCRIPTION": "$ZMAIN_PACKAGE",
|
|
140
|
-
"DEPTH": 0,
|
|
141
|
-
"OBJECT_COUNT": 11
|
|
142
|
-
},
|
|
143
|
-
{
|
|
144
|
-
"PACKAGE": "$ZMAIN_SUB1",
|
|
145
|
-
"PARENT": "$ZMAIN_PACKAGE",
|
|
146
|
-
"DESCRIPTION": "Sub Package 1",
|
|
147
|
-
"DEPTH": 1,
|
|
148
|
-
"OBJECT_COUNT": 10
|
|
149
|
-
},
|
|
150
|
-
{
|
|
151
|
-
"PACKAGE": "$ZMAIN_SUB1_A",
|
|
152
|
-
"PARENT": "$ZMAIN_SUB1",
|
|
153
|
-
"DESCRIPTION": "Sub Package 1A",
|
|
154
|
-
"DEPTH": 2,
|
|
155
|
-
"OBJECT_COUNT": 3
|
|
156
|
-
}
|
|
157
|
-
],
|
|
158
|
-
"TOTAL_PACKAGES": 6,
|
|
159
|
-
"TOTAL_OBJECTS": 127,
|
|
160
|
-
"OBJECTS": [
|
|
161
|
-
{ "OBJECT": "CLAS", "COUNT": 10 },
|
|
162
|
-
{ "OBJECT": "INTF", "COUNT": 2 },
|
|
163
|
-
{ "OBJECT": "PROG", "COUNT": 11 },
|
|
164
|
-
{ "OBJECT": "FUGR", "COUNT": 1 },
|
|
165
|
-
{ "OBJECT": "TABL", "COUNT": 3 }
|
|
166
|
-
],
|
|
167
|
-
"ERROR": ""
|
|
168
|
-
}
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
**Response Fields:**
|
|
172
|
-
|
|
173
|
-
| Field | Type | Description |
|
|
174
|
-
|-------|------|-------------|
|
|
175
|
-
| `SUCCESS` | boolean | Whether the request succeeded |
|
|
176
|
-
| `COMMAND` | string | Command name ("TREE") |
|
|
177
|
-
| `PACKAGE` | string | Root package name |
|
|
178
|
-
| `MESSAGE` | string | Status message |
|
|
179
|
-
| `PARENT_PACKAGE` | string | Parent package (empty if root) |
|
|
180
|
-
| `NODES` | array | Flat list of all packages with parent refs |
|
|
181
|
-
| `TOTAL_PACKAGES` | number | Total packages in tree |
|
|
182
|
-
| `TOTAL_OBJECTS` | number | Total objects in tree |
|
|
183
|
-
| `OBJECTS` | array | Object counts by type [{OBJECT, COUNT}] |
|
|
184
|
-
| `ERROR` | string | Error message (empty if success) |
|
|
185
|
-
|
|
186
|
-
**Node Structure:**
|
|
187
|
-
|
|
188
|
-
Each entry in `NODES` array:
|
|
189
|
-
|
|
190
|
-
| Field | Type | Description |
|
|
191
|
-
|-------|------|-------------|
|
|
192
|
-
| `PACKAGE` | string | Package name |
|
|
193
|
-
| `PARENT` | string | Parent package name |
|
|
194
|
-
| `DESCRIPTION` | string | Package description |
|
|
195
|
-
| `DEPTH` | number | Depth in tree (0 = root) |
|
|
196
|
-
| `OBJECT_COUNT` | number | Objects in this package |
|
|
197
|
-
|
|
198
|
-
**Note:** The `NODES` array is flat - children are identified by `PARENT` reference. The CLI builds the tree display by grouping nodes by depth and parent.
|
|
199
|
-
|
|
200
|
-
---
|
|
201
|
-
|
|
202
|
-
## Response Structure
|
|
203
|
-
|
|
204
|
-
### JSON Mode
|
|
205
|
-
|
|
206
|
-
```json
|
|
207
|
-
{
|
|
208
|
-
"SUCCESS": true,
|
|
209
|
-
"COMMAND": "TREE",
|
|
210
|
-
"PACKAGE": "$ZMAIN_PACKAGE",
|
|
211
|
-
"MESSAGE": "Tree retrieved successfully",
|
|
212
|
-
"PARENT_PACKAGE": "$ZSAP_BASE",
|
|
213
|
-
"NODES": [...],
|
|
214
|
-
"TOTAL_PACKAGES": 6,
|
|
215
|
-
"TOTAL_OBJECTS": 127,
|
|
216
|
-
"OBJECTS": [
|
|
217
|
-
{ "OBJECT": "CLAS", "COUNT": 10 },
|
|
218
|
-
{ "OBJECT": "INTF", "COUNT": 2 }
|
|
219
|
-
],
|
|
220
|
-
"ERROR": ""
|
|
221
|
-
}
|
|
222
|
-
```
|
|
223
|
-
|
|
224
|
-
See [JSON Output](#json-output-pure-scripting) for full schema.
|
|
225
|
-
|
|
226
|
-
---
|
|
227
|
-
|
|
228
|
-
## Error Handling
|
|
229
|
-
|
|
230
|
-
| Error | Message |
|
|
231
|
-
|-------|---------|
|
|
232
|
-
| Package not found | `Package <name> does not exist in the system` |
|
|
233
|
-
| Invalid package name | `Invalid package name: <name>` |
|
|
234
|
-
| Access denied | `Access denied to package information` |
|
|
235
|
-
| Depth too large | `Depth value too large (max: 10)` |
|
|
236
|
-
|
|
237
|
-
### Error Output
|
|
238
|
-
|
|
239
|
-
```
|
|
240
|
-
❌ Package not found: $ZNONEXISTENT
|
|
241
|
-
|
|
242
|
-
Error: Package $ZNONEXISTENT does not exist in the system.
|
|
243
|
-
```
|
|
244
|
-
|
|
245
|
-
---
|
|
246
|
-
|
|
247
|
-
## Example
|
|
248
|
-
|
|
249
|
-
```bash
|
|
250
|
-
# Basic usage
|
|
251
|
-
abapgit-agent tree --package $ZMY_PACKAGE
|
|
252
|
-
|
|
253
|
-
# With object breakdown
|
|
254
|
-
abapgit-agent tree --package $ZMY_PACKAGE --include-objects
|
|
255
|
-
|
|
256
|
-
# Shallow tree (depth 1)
|
|
257
|
-
abapgit-agent tree --package $ZMY_PACKAGE --depth 1
|
|
258
|
-
|
|
259
|
-
# JSON for scripting
|
|
260
|
-
abapgit-agent tree --package $ZMY_PACKAGE --json > tree.json
|
|
261
|
-
|
|
262
|
-
# CI/CD usage with jq
|
|
263
|
-
COUNT=$(abapgit-agent tree --package $ZMY_PACKAGE --json | jq '.TOTAL_OBJECTS')
|
|
264
|
-
echo "Package contains $COUNT objects"
|
|
265
|
-
```
|
|
266
|
-
|
|
267
|
-
---
|
|
268
|
-
|
|
269
|
-
## Implementation
|
|
270
|
-
|
|
271
|
-
### ABAP Tables Used
|
|
272
|
-
|
|
273
|
-
| Table | Purpose |
|
|
274
|
-
|-------|---------|
|
|
275
|
-
| **TDEVC** | Package definitions (contains `PARENTCL` for hierarchy) |
|
|
276
|
-
| **TADIR** | Object directory (for object counts per package) |
|
|
277
|
-
|
|
278
|
-
### Query Logic
|
|
279
|
-
|
|
280
|
-
```abap
|
|
281
|
-
" Get root package with parent
|
|
282
|
-
SELECT SINGLE devclass parentcl FROM tdevc
|
|
283
|
-
INTO ls_package
|
|
284
|
-
WHERE devclass = lv_package.
|
|
285
|
-
|
|
286
|
-
" Get direct sub-packages recursively (up to depth)
|
|
287
|
-
SELECT devclass parentcl FROM tdevc
|
|
288
|
-
INTO TABLE lt_direct_subs
|
|
289
|
-
WHERE parentcl = iv_parent.
|
|
290
|
-
|
|
291
|
-
" Get object count per package
|
|
292
|
-
SELECT COUNT(*) FROM tadir
|
|
293
|
-
INTO lv_count
|
|
294
|
-
WHERE devclass = iv_package
|
|
295
|
-
AND object NOT IN ('DEVC', 'PACK').
|
|
296
|
-
|
|
297
|
-
" Get object counts by type
|
|
298
|
-
SELECT object COUNT(*) AS count FROM tadir
|
|
299
|
-
INTO TABLE lt_counts
|
|
300
|
-
WHERE devclass = iv_package
|
|
301
|
-
AND object NOT IN ('DEVC', 'PACK')
|
|
302
|
-
GROUP BY object.
|
|
303
|
-
```
|