zsh-workers
 help / color / mirror / code / Atom feed
From: Daniel Shahaf <d.s@daniel.shahaf.name>
To: Frank Terbeck <ft@bewatermyfriend.org>
Cc: Reed Riley <john.reed.riley@gmail.com>, zsh-workers@zsh.org
Subject: Re: [PATCH] Fix hexdump command used for mercurial dirstate parsing
Date: Sun, 30 Oct 2016 17:06:58 +0000	[thread overview]
Message-ID: <20161030170534.GA17437@fujitsu.shahaf.local2> (raw)
In-Reply-To: <20161030155530.GC12137@fujitsu.shahaf.local2>

Daniel Shahaf wrote on Sun, Oct 30, 2016 at 15:55:30 +0000:
> Frank Terbeck wrote on Sun, Oct 30, 2016 at 12:11:01 +0100:
> > It would be conceivable to make the command that is called in these
> > places configurable via styles. But that is a separate issue to the
> > one that fixes our use of hexdump.
>
> Couldn't we replace hexdump by a pure zsh solution?  We simply need to
> read 20 octets and print their hexadecimal values.

This seems to do the job:

% f() {
    local fname=$1 bytecount=$2
    # Read 20 bytes
    setopt localoptions nomultibyte
    integer fd; local val
    exec {fd}<$fname
    read -k $bytecount -r -u $fd val
    exec {fd}<&-
    # Convert them to hex
    setopt localoptions extendedglob
    local -r -A pad=( $'\0' 0 $'\1' 0 $'\2' 0 $'\3' 0 $'\4' 0 $'\5' 0 $'\6' 0 $'\7' 0 $'\10' 0 $'\11' 0 $'\12' 0 $'\13' 0 $'\14' 0 $'\15' 0 $'\16' 0 $'\17' 0 )
    REPLY=${(L)val//(#b)(?)/$pad[$match[1]]$(( [##16] ##${match[1]} ))}
}
% f dirstate 20 
% typeset -p REPLY
typeset REPLY=77bba665e970146bd2be0b2da40092e340408804
% xxd -l20 -p < dirstate
77bba665e970146bd2be0b2da40092e340408804
% 

Would something along these lines be preferable?

Thanks to Mikael for the inner loop.

Cheers,

Daniel


  reply	other threads:[~2016-10-30 17:09 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-10-30  2:47 Reed Riley
2016-10-30  5:34 ` Bart Schaefer
2016-10-30  7:01 ` Mikael Magnusson
2016-10-30 11:11 ` Frank Terbeck
2016-10-30 14:43   ` Reed Riley
2016-10-30 16:58     ` Reed Riley
2016-10-30 19:57       ` Frank Terbeck
2016-10-30 15:55   ` Daniel Shahaf
2016-10-30 17:06     ` Daniel Shahaf [this message]
2016-10-30 18:28       ` Bart Schaefer
2016-10-30 20:33         ` Daniel Shahaf
2016-10-31  9:04           ` Frank Terbeck
2016-10-31 18:37             ` Daniel Shahaf

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20161030170534.GA17437@fujitsu.shahaf.local2 \
    --to=d.s@daniel.shahaf.name \
    --cc=ft@bewatermyfriend.org \
    --cc=john.reed.riley@gmail.com \
    --cc=zsh-workers@zsh.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).