#!/usr/bin/env python3
"""Decode the DF-2765 journal stream: prove PATH1==PATH2==target and the
source path is absent."""
import struct, sys
data = open(sys.argv[1] if len(sys.argv) > 1 else 'journal_stream.bin','rb').read()
print("stream bytes:", len(data))
print("JTYPE_RENAME (0x801D) stream record present:", b'\x1d\x80' in data)
print("PATH1 leaf (0x0402) occurrences:", data.count(struct.pack('<H',0x0402)))
print("PATH2 leaf (0x0403/0x4403) occurrences:", data.count(struct.pack('<H',0x0403)))
print("target path 'jt/b/dst.txt' count:", data.count(b'jt/b/dst.txt'))
print("SOURCE path 'jt/a/src.txt' count:", data.count(b'jt/a/src.txt'), "(expected 0 = BUG)")
# raw leaf dump inside the rename record
for magic,name in ((0x0402,'PATH1'),(0x4403,'PATH2|LAST'),(0x0403,'PATH2')):
    i = data.find(struct.pack('<H', magic), 0x38, 0x90)
    if i >= 0:
        srs, = struct.unpack_from('<i', data, i+4)
        print(f"{name} @ {i:#04x} recsize={srs} value={data[i+8:i+8+max(0,srs-8)]!r}")
