• Jeff King's avatar
    pkt-line: show packets in async processes as "sideband" · fd89433d
    Jeff King authored
    If you run "GIT_TRACE_PACKET=1 git push", you may get
    confusing output like (line prefixes omitted for clarity):
    
       packet:      push< \1000eunpack ok0019ok refs/heads/master0000
       packet:      push< unpack ok
       packet:      push< ok refs/heads/master
       packet:      push< 0000
       packet:      push< 0000
    
    Why do we see the data twice, once apparently wrapped inside
    another pkt-line, and once unwrapped? Why do we get two
    flush packets?
    
    The answer is that we start an async process to demux the
    sideband data. The first entry comes from the sideband
    process reading the data, and the second from push itself.
    Likewise, the first flush is inside the demuxed packet, and
    the second is an actual sideband flush.
    
    We can make this a bit more clear by marking the sideband
    demuxer explicitly as "sideband" rather than "push". The
    most elegant way to do this would be to simply call
    packet_trace_identity() inside the sideband demuxer. But we
    can't do that reliably, because it relies on a global
    variable, which might be shared if pthreads are in use.
    
    What we really need is thread-local storage for
    packet_trace_identity. But the async code does not provide
    an interface for that, and it would be messy to add it here
    (we'd have to care about pthreads, initializing our
    pthread_key_t ahead of time, etc).
    
    So instead, let us just assume that any async process is
    handling sideband data. That's always true now, and is
    likely to remain so in the future.
    
    The output looks like:
    
       packet:  sideband< \1000eunpack ok0019ok refs/heads/master0000
       packet:      push< unpack ok
       packet:      push< ok refs/heads/master
       packet:      push< 0000
       packet:  sideband< 0000
    Signed-off-by: default avatarJeff King <peff@peff.net>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    fd89433d
pkt-line.c 5.42 KB