#!/usr/bin/tclsh8.6

# Simple tool for PARSEC-UC profile creation based on dmesg failure
# messages.

proc escape-literal {name} {
    # TODO control character escaping
    string map {* {\*} ? {\?} [ {\[} ] {\]}} $name
}

proc parse-dmesg {chan {justuid {}}} {
    set d [dict create 1 {} 2 {} 3 {}]
    while {[gets $chan line]!=-1} {
	if {[regexp {\[[ 0-9]+\.[0-9]+\] PARSEC-UC: UID=([0-9]+).* op\[(.),(.)\]'(.*)'$} \
		 $line -> uid op rel name]} {

	    if {$justuid ne "" && $justuid ne $uid} {
		continue
	    }
	    # puts "uid $uid op $op name $name"
	    dict set d $op $rel $name {}
	}
    }
    dict for {k v} $d {
	dict for {k2 v2} $v {
	    foreach fn [lsort [dict keys $v2]] {
		# replace (deleted) fot yet unexistent file
		regsub { \(deleted\)$} $fn {\z} fn 
		puts "+file $k $k2: [escape-literal $fn]"
	    }
	}
    }
}

parse-dmesg stdin [lindex $argv 0]

# Local Variables:
# mode: tcl
# End:
