File: diff_profiles.fish

package info (click to toggle)
fish 4.2.1-3.1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 35,980 kB
  • sloc: python: 6,972; javascript: 1,407; sh: 1,009; xml: 411; ansic: 230; objc: 78; makefile: 20
file content (53 lines) | stat: -rwxr-xr-x 1,455 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#!/usr/bin/env fish
#
# Compares the output of two fish profile runs and emits the time difference between
# the first and second set of results.
#
# Usage: ./diff_profiles.fish profile1.log profile2.log > profile_diff.log

if test (count $argv) -ne 2

    echo "Incorrect number of arguments."
    echo "Usage: "(status filename)" profile1.log profile2.log"
    exit 1
end

set -l profile1 (cat $argv[1])
set -l profile2 (cat $argv[2])

set -l line_no 0
while set -l next_line_no (math $line_no + 1) && set -q profile1[$next_line_no] && set -q profile2[$next_line_no]
    set line_no $next_line_no

    set -l line1 $profile1[$line_no]
    set -l line2 $profile2[$line_no]

    if not string match -qr '^\s*\d+\s+\d+' $line1
        echo $line1
        continue
    end

    set -l results1 (string match -r '^\s*(\d+)\s+(\d+)\s+(.*)' $line1)
    set -l results2 (string match -r '^\s*(\d+)\s+(\d+)\s+(.*)' $line2)

    # times from both files
    set -l time1 $results1[2..3]
    set -l time2 $results2[2..3]

    # leftover from both files
    set -l remainder1 $results1[4]
    set -l remainder2 $results2[4]

    if not string match -q -- $remainder1 $remainder2
        echo Mismatch on line $line_no:
        echo - $remainder1
        echo + $remainder2
        exit 1
    end

    set -l diff
    set diff[1] (math $time1[1] - $time2[1])
    set diff[2] (math $time1[2] - $time2[2])

    printf '%10d %10d %s\n' $diff[1] $diff[2] $remainder1
end