My realization of the week: at least on Linux, when symbolic links are at play, a/b/../c doesn't necessarily means a/c (b can be a symbolic link, so a/b/.. means the parent of the target directory of b).
When using symbolic linked directories, it seems the display editor and the display runtime doesn't resolve relative paths the same way.
How to reproduce:
Created structure:
.
└── test
├── a
│ └── b
│ └── test-source.bob
├── c -> ./a/b
└── test-target.bob
The created Embedded Display points to ../../test-target.bob which correct: relative to the display this is test/c/../../test-target.bob which resolves to test/a/b/../../test-target.bob -> test/test-target.bob (and not test-target.bob).
For us, this happened because we develop some of our displays in different Git repositories, and have a different structure to present to the operators in production. For development, we created that structure using symbolic links so that modifying displays in that structure modifies the displays in our Git repositories:
dev-bundle
├── sources
│ └── our-internal-gitlab.example.com
│ ├── git-repo1
│ ├── git-repo2
│ └── etc.
└── views
├── LCS
│ └── LLRF -> ../../sources/our-internal-gitlab.example.com/LLRF-views
└── MCS -> ../sources/our-internal-gitlab.example.com/MCS-views
My realization of the week: at least on Linux, when symbolic links are at play,
a/b/../cdoesn't necessarily meansa/c(bcan be a symbolic link, soa/b/..means the parent of the target directory ofb).When using symbolic linked directories, it seems the display editor and the display runtime doesn't resolve relative paths the same way.
How to reproduce:
In a given directory, run:
Open Phoebus, and:
test-target.bobin the newly createdtestfolder,test-source.bobin thetest/c/folder (through the symbolic link),test-source.bob, create an Embedded Display, and using the Phoebus interface, make it point totest-target.bob,Created structure:
The created Embedded Display points to
../../test-target.bobwhich correct: relative to the display this istest/c/../../test-target.bobwhich resolves totest/a/b/../../test-target.bob->test/test-target.bob(and nottest-target.bob).For us, this happened because we develop some of our displays in different Git repositories, and have a different structure to present to the operators in production. For development, we created that structure using symbolic links so that modifying displays in that structure modifies the displays in our Git repositories: