On Thu, 27 Jan 2011, Jesse Rosenthal wrote:
> Dear all,
> 
> Just a note to say that I finally got around to updating the remote
> usage script on the wiki to what I'm using now. With "--format=raw" in,
> it's all pretty straightforward. 

Hi Jesse,

thanks for this. I wanted to do this since the --format=raw was merged,
but didn't find the time for it. I have a few comments:

> The only things the script does now are:
> 
> 1. Produces a slight pause in the "notmuch show" output to avoid that
>    weird bug where emacs leaves off every tenth message or so.

I added a comment to the script to explain the sleep there. Otherwise,
people may delete the command because they think it is not needed.


> 2. Locally caches raw messages (i.e. when --format=raw) is called. This
>    usually happens when getting attachments, so this is a nice way to
>    avoid having to download large attachments repeatedly.

This is a good idea.

>    Note this just caches based on msg-id (or a hash thereof, to avoid
>    strange characters in file names). That means that if an attachment
>    is deleted on the server, the cache will be out of date. An easy way
>    to fix this would be to make the cache file name a concatenation of
>    the msg-id hash (check that first) and the hash of the actual message
>    (check that if the msg-id hash is there). I might put this in in the
>    future, especially if anyone else is using the script.
> 
> 3. Escapes dollar signs in the msg-id to make shell-quoting over ssh
>    work.

I think that quoting with
  printf -v args "%q " "$@"
instead of sed would work more reliably (see bash(1)).

> I've actually switched over to keeping my messages on my IMAP server and
> using this remote script on all of my computers. It avoids any need for
> syncing. It's been working very well for me so far.
> 
> A future feature might be to integrate the ControlMaster feature of
> openssh into the script, instead of having to open a connection
> manually, but there are some complications there (dead sockets still
> around if you go offline, etc.).

In another project I worked around the dead sockets this way:

sshgw() {
    local socket="$HOME/.ssh/cangw-connection"

    if [[ ! -S $socket ]] || ! ssh -x -a -S $socket root at 192.168.2.3 true; 
then
        # Create master connection to speed up subsequent commands.
        ssh -N -f -M -S $socket root at 192.168.2.3 >/dev/null 2>&1
    fi
    ssh -x -a -S $socket root at 192.168.2.3 "$@"
}

I guess this should work even for notmuch.

-Michal

Reply via email to