chore: 同步至源码 2.5.1 — SKILL.md 改为构建产物 + 工具代码刷新
SKILL.md(唯一来源 = sap-cli/skill-src/SKILL.md.tmpl):
- 本仓 SKILL.md 自此为构建产物,勿手工编辑;手改后再构建会被漂移护栏拦下
- 并入模板独有内容:调用方式节 + 补齐 parser 真实命令(clone/enhancement/
history/unit-test/unlock/transport create,原表只 9 个,实际 31 个)
- 版本号改为 {{VERSION}} 注入(原字面量停在 v2.2.1/v2.3.0,与工具实际版本脱节)
- 修 1 处违反铁律 5 的示例(--path ./src → ./src/TMP/class/)
assets/(工具代码,此前严重过时):
- 9 个文件与源码不一致,scanner.py 尤甚:3818B → 6664B
- 修复前从本仓装出的工具**不支持三层 src 结构**,铁律 5 实际跑不通
- transport.py 反向漂移(分发版多 transport create,源码无)已随源码回迁对齐
VERSION 2.5.1;references/ 三份规则与源码一致(无差异)
This commit is contained in:
@@ -8,6 +8,7 @@ from sapcli.commands.crud import (
|
||||
cmd_download,
|
||||
cmd_info,
|
||||
cmd_sync,
|
||||
cmd_unlock,
|
||||
)
|
||||
from sapcli.commands.batch import (
|
||||
cmd_init,
|
||||
@@ -76,6 +77,7 @@ from sapcli.commands.enhancement import (
|
||||
__all__ = [
|
||||
"cmd_create",
|
||||
"cmd_delete",
|
||||
"cmd_unlock",
|
||||
"cmd_download",
|
||||
"cmd_info",
|
||||
"cmd_init",
|
||||
|
||||
@@ -37,8 +37,9 @@ def cmd_init(args: argparse.Namespace, client: ADTClient) -> None:
|
||||
|
||||
if not scanned:
|
||||
print(" ℹ 未扫描到 .abap 文件")
|
||||
print(" 请确认项目目录结构是否符合约定:")
|
||||
print(" reports/, classes/, interfaces/, functions/, domains/, ...")
|
||||
print(" 请确认项目目录结构是否符合约定(两种布局均可):")
|
||||
print(" 三层: src/<开发包>/<对象类型>/<文件名>.abap (本地开发包固定 TMP)")
|
||||
print(" 扁平: <对象类型>/<文件名>.abap (对象类型目录单复数均可)")
|
||||
return
|
||||
|
||||
print(f" ✓ 扫描到 {len(scanned)} 个本地文件\n")
|
||||
|
||||
@@ -589,6 +589,30 @@ def cmd_delete(args: argparse.Namespace, client: ADTClient) -> None:
|
||||
raise DeleteError(f"删除失败: {error}")
|
||||
|
||||
|
||||
def cmd_unlock(args: argparse.Namespace, client: ADTClient) -> None:
|
||||
"""释放指定对象的 enqueue 锁(清理 delete 后残留锁 / SM12 场景)。"""
|
||||
obj_type: str = args.type
|
||||
name: str = args.name
|
||||
lock_handle: str = args.lock_handle
|
||||
|
||||
parsed = parse_object_name(name, obj_type)
|
||||
type_label = get_type_config(obj_type).label
|
||||
|
||||
print("=" * 60)
|
||||
print(" SAP ADT 释放对象锁")
|
||||
print("=" * 60)
|
||||
print(f" 对象类型: {type_label}")
|
||||
print(f" 对象名称: {parsed.display_name}")
|
||||
|
||||
print(f"\n → 正在释放锁 (lockHandle={lock_handle[:12]}...)...")
|
||||
ok = client.unlock(parsed.obj_uri, lock_handle)
|
||||
if ok:
|
||||
print(" ✓ 锁释放成功")
|
||||
else:
|
||||
print(" ✗ 锁释放失败(HTTP 非 200,可能锁已不存在或 handle 无效)")
|
||||
raise SapCliError(f"解锁失败: {parsed.display_name}")
|
||||
|
||||
|
||||
def _update_manifest_after_delete(
|
||||
args: argparse.Namespace,
|
||||
name: str,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
"""传输管理命令:transport (list / info / release / objects)。"""
|
||||
"""传输管理命令:transport (list / info / release / objects / create)。"""
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
@@ -119,7 +119,7 @@ def _transport_create(args: argparse.Namespace, client: ADTClient) -> None:
|
||||
print("=" * 60)
|
||||
print(f" 描述: {description}")
|
||||
|
||||
print(f"\n → 正在创建...")
|
||||
print("\n → 正在创建...")
|
||||
try:
|
||||
new_nr = client.create_transport_request(description)
|
||||
except Exception as e:
|
||||
@@ -129,7 +129,7 @@ def _transport_create(args: argparse.Namespace, client: ADTClient) -> None:
|
||||
if new_nr:
|
||||
print(f"\n ✓ 传输请求已创建: {new_nr}")
|
||||
else:
|
||||
print(f"\n ✗ 创建失败(未返回编号),请检查系统或描述合法性")
|
||||
print("\n ✗ 创建失败(未返回编号),请检查系统或描述合法性")
|
||||
|
||||
|
||||
def _transport_objects(args: argparse.Namespace, client: ADTClient) -> None:
|
||||
|
||||
Reference in New Issue
Block a user