unison icon indicating copy to clipboard operation
unison copied to clipboard

When synchronizing with SSH, only the first line of a multi-line message from the server is marked as such

Open mvglasow opened this issue 3 years ago • 3 comments

As mentioned by @tleedjarv in #796, messages from the server should be prefixed with Server: when synchronizing with a remote server over SSH.

I have encountered an instance where this is not the case. To reproduce:

  • Set up sync with a remote system over SSH
  • On the server, replace ~/.unison with something that is not a dir (in my case this was a broken symlink)
  • Try to sync

Actual output:

~$ unison someprofile -ui text
Contacting server...
Unison failed: Fatal error: Error in creating unison directory /home/user/.unison:
File exists [mkdir(/home/user/.unison)]
Fatal error: Lost connection with the server

Expected output:

~$ unison someprofile -ui text
Contacting server...
Server: Unison failed: Fatal error: Error in creating unison directory /home/user/.unison:
Server: File exists [mkdir(/home/user/.unison)]
Fatal error: Lost connection with the server

This was on 2.48 on both client and server. (If this has been fixed since, feel free to close.)

mvglasow avatar Sep 21 '22 18:09 mvglasow

Half of the issue is fixed since 2.51.3 where the output reads Unison server failed.

The other half (not fixed) is that File exists [mkdir(/home/user/.unison)] looks like a separate error or a separate output. It is a continuation of the same error. The entire error message is this:

Fatal error: Error in creating unison directory /home/user/.unison:
File exists [mkdir(/home/user/.unison)]

This formatting makes it look like two different errors.

You may want to adjust the issue to be about confusing formatting only.

tleedjarv avatar Sep 22 '22 05:09 tleedjarv

I’ve updated the description.

Suggestion for UX (if not already in place): any message that comes from the server should have a prefix denoting it as such. This prefix should be consistent across all messages (not e.g. Remote host: for one message, Server reports: for another). If a message spans multiple lines, each line should be prefixed.

As an example from the latter, logcat on Android is a good example: anything printed to System.out becomes a logcat entry, and each line is prefixed with a timestamp and severity, even for a message which spans multiple lines.

That means that, rather than just printing Server: followed by the message from the server, Unison would have to:

  • either process all messages coming back from the server, inserting Server: at the beginning of each line,
  • or split the message string into multiple substrings at each line break, then iterate over these strings and print Server: followed by the message substring.

Output on the client then should be something like:

Contacting server...
Server: Fatal error: Error in creating unison directory /home/user/.unison:
Server: File exists [mkdir(/home/user/.unison)]
Fatal error: Lost connection with the server

mvglasow avatar Sep 22 '22 10:09 mvglasow

Suggestion for UX (if not already in place): any message that comes from the server should have a prefix denoting it as such. This prefix should be consistent across all messages (not e.g. Remote host: for one message, Server reports: for another). If a message spans multiple lines, each line should be prefixed.

I think this is a relevant feature request.

I think it is mainly important with ssh (but not only) because all remote stderr output is printed on local stderr (or in GUI, during startup). Currently with -servercmd nonexistent_executable, for example, you get back an error from your remote shell (something like bash: nonexistent_executable: command not found). This and other similar errors are very confusing for the user.

tleedjarv avatar Sep 22 '22 15:09 tleedjarv