<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">#!/usr/bin/perl -w
#
## Copyright (C) 1996-2024 The Squid Software Foundation and contributors
##
## Squid software is distributed under GPLv2+ license and includes
## contributions from numerous individuals and organizations.
## Please see the COPYING and CONTRIBUTORS files for details.
##

# Reads cache.log and displays lines that correspond to a given CodeContext.

use strict;
use warnings;

die("usage: $0 &lt;CodeContext id&gt; [log filename]\n") unless @ARGV;
my $ContextId = shift;

my $GroupSeparator = "--\n";

my $inside = 0;
my $currentGroup = 0;
my $lastReportedGroup = undef();
while (&lt;&gt;) {
    if (/\bCodeContext.*?\bEntering: (.*)/) {
        my $wasInside = $inside;
        $inside = $1 eq $ContextId;

        # detect no-Leaving switches from our CodeContext to another
        ++$currentGroup if $wasInside &amp;&amp; !$inside;
    }

    my $external = !$inside &amp;&amp; /\b$ContextId\b/o;

    if ($inside || $external) {
        ++$currentGroup if $external;
        print $GroupSeparator if defined($lastReportedGroup) &amp;&amp; $currentGroup != $lastReportedGroup;
        print $_;
        $lastReportedGroup = $currentGroup;
    } else {
        ++$currentGroup;
    }

    if ($inside &amp;&amp; /\bCodeContext.*?\bLeaving: /) {
        $inside = 0;
        ++$currentGroup;
    }
}

exit(0);
</pre></body></html>