Dereference potential linked launch.sh file

It can be useful to have launch.sh linked somewhere outside the
repository clone. For instance to expose launch.sh in the $PATH.

Exposing launch.sh with a symbolic link outside the git repository
breaks poezio execution through launch.sh. “ cd dirname "$0" ” will get
to the directory holding the link and not within the git repository.
8 jobs for main in 4 minutes and 52 seconds (queued for 3 seconds)
Status Job ID Name Coverage
  Lint
failed #31115
allowed to fail
mypyc

00:00:34

failed #31113
allowed to fail
pylint-latest

00:02:36

failed #31114
allowed to fail
pylint-plugins

00:02:12

passed #31112
security-check

00:00:20

 
  Test
passed #31116
pytest-3.7

00:00:36

passed #31117
pytest-latest

00:00:48

 
  Build
passed #31118
www
build-doc

00:01:21

passed #31119
build-ubuntu

00:00:16

 
Name Stage Failure
failed
pylint-latest Lint
poezio/ui/types.py:104:23: E1136: Value 'Optional' is unsubscriptable (unsubscriptable-object)
poezio/ui/types.py:105:29: E1136: Value 'Optional' is unsubscriptable (unsubscriptable-object)
poezio/ui/types.py:108:23: E1136: Value 'Optional' is unsubscriptable (unsubscriptable-object)
poezio/ui/types.py:109:29: E1136: Value 'Optional' is unsubscriptable (unsubscriptable-object)
poezio/ui/types.py:110:22: E1136: Value 'Optional' is unsubscriptable (unsubscriptable-object)
poezio/ui/types.py:112:30: E1136: Value 'Optional' is unsubscriptable (unsubscriptable-object)
poezio/ui/types.py:114:22: E1136: Value 'Optional' is unsubscriptable (unsubscriptable-object)
Cleaning up file based variables
ERROR: Job failed: exit code 1
failed
mypyc Lint
poezio/plugin_e2ee.py:270: error: Argument 2 to "isinstance" has incompatible type "Tuple[Union[MucTab, DynamicConversationTab, StaticConversationTab, PrivateTab]]"; expected "Union[type, Tuple[Union[type, Tuple[Any, ...]], ...]]"
poezio/plugin_e2ee.py:329: error: Unexpected keyword argument "passthrough" for "_encrypt" of "E2EEPlugin"
poezio/plugin_e2ee.py:374: error: Item "MucTab" of "Union[MucTab, DynamicConversationTab, StaticConversationTab, PrivateTab]" has no attribute "parent_muc"
poezio/plugin_e2ee.py:374: error: Item "DynamicConversationTab" of "Union[MucTab, DynamicConversationTab, StaticConversationTab, PrivateTab]" has no attribute "parent_muc"
poezio/plugin_e2ee.py:374: error: Item "StaticConversationTab" of "Union[MucTab, DynamicConversationTab, StaticConversationTab, PrivateTab]" has no attribute "parent_muc"
poezio/plugin_e2ee.py:389: note: "_encrypt" of "E2EEPlugin" defined here
poezio/plugin_e2ee.py:499: error: Incompatible return value type (got "Union[str, int, float, bool]", expected "str")
Cleaning up file based variables
ERROR: Job failed: exit code 1
failed
pylint-plugins Lint
$ pylint -E plugins
************* Module plugins.upload
plugins/upload.py:53:40: E1136: Value 'Optional' is unsubscriptable (unsubscriptable-object)
************* Module plugins.lastlog
plugins/lastlog.py:27:18: E1136: Value 'Optional' is unsubscriptable (unsubscriptable-object)
************* Module plugins.untrackme
plugins/untrackme.py:17:11: E1136: Value 'Union' is unsubscriptable (unsubscriptable-object)
Cleaning up file based variables
ERROR: Job failed: exit code 1