dfdf
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from pathlib import Path
|
||||
from typing import Any, Dict, Optional, Sequence
|
||||
from typing import Any, Dict, List, Optional, Sequence, Tuple
|
||||
import sys
|
||||
|
||||
from SYS.logger import log
|
||||
@@ -103,6 +103,9 @@ class Add_Note(Cmdlet):
|
||||
store_registry = Store(config)
|
||||
updated = 0
|
||||
|
||||
# Batch write plan: store -> [(hash, name, text), ...]
|
||||
note_ops: Dict[str, List[Tuple[str, str, str]]] = {}
|
||||
|
||||
# Optional global fallback for note text from pipeline values.
|
||||
# Allows patterns like: ... | add-note sub
|
||||
pipeline_default_text = None
|
||||
@@ -177,20 +180,43 @@ class Add_Note(Cmdlet):
|
||||
log(f"[add_note] Error: Unknown store '{store_name}': {exc}", file=sys.stderr)
|
||||
return 1
|
||||
|
||||
ok = False
|
||||
try:
|
||||
ok = bool(backend.set_note(resolved_hash, note_name, item_note_text, config=config))
|
||||
except Exception as exc:
|
||||
log(f"[add_note] Error: Failed to set note: {exc}", file=sys.stderr)
|
||||
ok = False
|
||||
|
||||
if ok:
|
||||
updated += 1
|
||||
# Queue for bulk write per store. We still emit items immediately;
|
||||
# the pipeline only advances after this cmdlet returns.
|
||||
note_ops.setdefault(store_name, []).append((resolved_hash, note_name, item_note_text))
|
||||
updated += 1
|
||||
|
||||
ctx.emit(res)
|
||||
|
||||
# Execute bulk writes per store.
|
||||
wrote_any = False
|
||||
for store_name, ops in note_ops.items():
|
||||
if not ops:
|
||||
continue
|
||||
try:
|
||||
backend = store_registry[store_name]
|
||||
except Exception:
|
||||
continue
|
||||
|
||||
bulk_fn = getattr(backend, "set_note_bulk", None)
|
||||
if callable(bulk_fn):
|
||||
try:
|
||||
ok = bool(bulk_fn(list(ops), config=config))
|
||||
wrote_any = wrote_any or ok or True
|
||||
ctx.print_if_visible(f"✓ add-note: {len(ops)} item(s) in '{store_name}'", file=sys.stderr)
|
||||
continue
|
||||
except Exception as exc:
|
||||
log(f"[add_note] Warning: bulk set_note failed for '{store_name}': {exc}; falling back", file=sys.stderr)
|
||||
|
||||
# Fallback: per-item writes
|
||||
for file_hash, name, text in ops:
|
||||
try:
|
||||
ok = bool(backend.set_note(file_hash, name, text, config=config))
|
||||
wrote_any = wrote_any or ok
|
||||
except Exception:
|
||||
continue
|
||||
|
||||
log(f"[add_note] Updated {updated} item(s)", file=sys.stderr)
|
||||
return 0 if updated > 0 else 1
|
||||
return 0 if (updated > 0 and wrote_any) else (0 if updated > 0 else 1)
|
||||
|
||||
|
||||
CMDLET = Add_Note()
|
||||
|
||||
Reference in New Issue
Block a user