#1418: Link failures name the objects that block the link #1481
No reviewers
Labels
No labels
amd
avatars
bug
builder
cannot-reproduce
crash
epic
feature
from-viewer
gl-removal
known-limitation
monitoring
parity
perf
platform
priority
critical
priority
high
priority
low
priority
medium
provenance
rendering
rt
status
in-progress
status
testing
status
up-next
triage
ui
upstream
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
sky_line/Slipstream!1481
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "TheSlowly/Slipstream:link-blockers-1418"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Fixes #1418.
linkObjects() keeps its checks and order; when one fails, the notice now names the root objects that break it (no-mod, permanent, other owner with the owner named, other region, still loading), up to 10 then "and N more", with Deselect these / Select only these. Names come from the selection's existing properties (no new requests); the old notices remain the fallback. The notices are non-modal so one can stay open while looking around.
Not done: animated-object failures (only the Link button's enable check knows them, linkObjects never fails on them).
Tests:
sllinkblockers_test.cpp(standalone g++),link_blockers_checks.pyin indra/newview/tests.Linking a big selection that holds one no-mod prim failed with a generic "you don't have modify permission on all the objects", leaving the user to hunt for the culprit among dozens of prims. The same went for permanent (pathfinding) roots, mixed owners, a second region and data still downloading. linkObjects() keeps its checks, their order and what they allow. When one fails, one pass over the selection's root nodes collects what the selection already knows (name, permissions, owner, region, position; no requests), and the notice names the roots that break that rule: up to 10, then "and N more". Same-named roots get their position, roots whose properties haven't arrived show "(loading) at <position>". The owner notice compares against the majority owner (a tie keeps the agent's own objects) and names each other owner by an inspect link that resolves through the name cache; the region notice names the majority region. The notices get "Deselect these" (removes each named object's link set from the selection, if it is still selected) and "Select only these" (replaces the selection with the named objects). Both look the objects up again when pressed and skip any that died, so a notice left open stays safe. The still-downloading case stays a tip, now listing the objects it waits for. When nothing can be named, the old notices show as before. The rules live in sllinkblockers.{h,cpp} with no viewer types, tested standalone; a source check covers the wiring. Test-Plan: g++ -std=c++17 -Wall -Wextra -Werror -I indra/newview indra/newview/tests/sllinkblockers_test.cpp indra/newview/sllinkblockers.cpp -o /tmp/sllinkblockers_test && /tmp/sllinkblockers_test python3 indra/newview/tests/link_blockers_checks.py --source-root . clang-cl /Zs with the Windows build flags on llselectmgr.cpp and sllinkblockers.cpp In world: select 50 prims including 2 no-mod ones, Link: the notice names the 2; Deselect these, then Link works In world: Select only these after a failed link selects just the named objects In world: a selection with another owner's modifiable object names it and its owner In world: a selection across a region border names the objects in the other region In world: link right after selecting a large set: the tip lists the objects still loading In world: Build floater Link button, Build > Link and Ctrl+L show the same notice Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>e3974ea23ctoc997044bb0View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.