#!/usr/bin/env tclsh8.4

proc build.tree.stat.info {ar_ptr dir} {
 upvar $ar_ptr ar

 array set ar {}

 foreach f [glob -nocomplain [file join $dir *]] {
  if {[file isdirectory $f]} {
   build.tree.stat.info ar $f
  } else {
   set ar($f) [file size $f]
  }
 }
}

proc compare.arrays {a_ptr b_ptr} {
 upvar $a_ptr a
 upvar $b_ptr b

 foreach {f size} [array get a] {
  if {![info exists b($f)]} {
   puts "$f doesn't exist in $b_ptr"
  } elseif {$size != [set b($f)]} {
   puts "size for $f in tree $a_ptr doesn't match tree $b_ptr"
  }
 }
}

proc compare.trees {a_ptr b_ptr} {
 upvar $a_ptr a
 upvar $b_ptr b

 compare.arrays a b
 compare.arrays b a
}

proc main {argc argv} {
 if {2 != $argc} {
  puts stderr "syntax: tree-a tree-b"
  exit 1
 }

 set oldwd [pwd]
 cd [lindex $argv 0]
 build.tree.stat.info a {}
 #parray a
 cd $oldwd
 cd [lindex $argv 1]
 build.tree.stat.info b {}
 #parray b

 compare.trees a b
}
main $::argc $::argv
