41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
if {[lindex [lsort -dictionary [list $s1 $s2]] 0] eq $s1} {
return -1
}
return 1
}
# Sort file names
proc Fsort {l} {
lsort -dictionary $l
}
# Compare two files or dirs
# Return true if equal
proc CompareFiles {file1 file2} {
if {[catch {file lstat $file1 stat1}]} {
return 0
}
if {[catch {file lstat $file2 stat2}]} {
|
<
<
<
<
<
|
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
if {[lindex [lsort -dictionary [list $s1 $s2]] 0] eq $s1} {
return -1
}
return 1
}
# Compare two files or dirs
# Return true if equal
proc CompareFiles {file1 file2} {
if {[catch {file lstat $file1 stat1}]} {
return 0
}
if {[catch {file lstat $file2 stat2}]} {
|
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
|
} else {
$self SetNodeStatus $node change
}
}
# List files under a directory node
# Returns status for the new node
method ListFiles {df1 df2 node} {
if {[catch {file stat $df1 stat1}]} {
set size1 ""
set time1 ""
set type1 ""
} else {
set size1 $stat1(size)
set time1 [FormatDate $stat1(mtime)]
set type1 $stat1(type)
}
if {[catch {file stat $df2 stat2}]} {
set size2 ""
set time2 ""
set type2 ""
} else {
set size2 $stat2(size)
set time2 [FormatDate $stat2(mtime)]
set type2 $stat2(type)
}
if {$df1 ne ""} {
set type $type1
set name [file tail $df1]
} else {
set type $type2
set name [file tail $df2]
|
|
>
|
>
|
|
|
>
|
>
|
|
|
|
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
|
} else {
$self SetNodeStatus $node change
}
}
# List files under a directory node
# Returns status for the new node
method ListFiles {fD1 fD2 node} {
if {[dict size $fD1] == 0} {
set df1 ""
set size1 ""
set time1 ""
set type1 ""
} else {
set df1 [dict get $fD1 full]
set size1 [dict get $fD1 size]
set time1 [FormatDate [dict get $fD1 mtime]]
set type1 [dict get $fD1 type]
}
if {[dict size $fD2] == 0} {
set df2 ""
set size2 ""
set time2 ""
set type2 ""
} else {
set df2 [dict get $fD2 full]
set size2 [dict get $fD2 size]
set time2 [FormatDate [dict get $fD2 mtime]]
set type2 [dict get $fD2 type]
}
if {$df1 ne ""} {
set type $type1
set name [file tail $df1]
} else {
set type $type2
set name [file tail $df2]
|
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
|
set p1 0
set p2 0
set status_change 0
set status_unknown 0
while 1 {
if {$p1 < $len1 && $p2 < $len2} {
set fD1 [lindex $filesD1 $p1]
set df1 [dict get $fD1 full]
set f1 [dict get $fD1 tail]
set fD2 [lindex $filesD2 $p1]
set df2 [dict get $fD2 full]
set f2 [dict get $fD1 tail]
set apa [FStrCmp $f1 $f2]
if {$apa == 0} {
# Equal names, separate them if not the same type
set apa [expr {- [dict get $fD1 dir] \
+ [dict get $fD2 dir]}]
}
switch -- $apa {
0 {
set sts [$self ListFiles $df1 $df2 $node]
incr p1
incr p2
if {$sts eq "unknown"} {
set status_unknown 1
}
}
-1 {
$self ListFiles $df1 "" $node
incr p1
set status_change 1
}
1 {
$self ListFiles "" $df2 $node
incr p2
set status_change 1
}
}
} elseif {$p1 < $len1 && $p2 >= $len2} {
set fD1 [lindex $filesD1 $p1]
set df1 [dict get $fD1 full]
$self ListFiles $df1 "" $node
incr p1
set status_change 1
} elseif {$p1 >= $len1 && $p2 < $len2} {
set fD2 [lindex $filesD2 $p1]
set df2 [dict get $fD2 full]
$self ListFiles "" $df2 $node
incr p2
set status_change 1
} else {
break
}
}
if {$dir1 eq ""} {
|
<
<
<
<
|
|
|
|
<
|
<
|
|
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
|
set p1 0
set p2 0
set status_change 0
set status_unknown 0
while 1 {
if {$p1 < $len1 && $p2 < $len2} {
set fD1 [lindex $filesD1 $p1]
set fD2 [lindex $filesD2 $p1]
set apa [FStrCmp [dict get $fD1 tail] [dict get $fD1 tail]]
if {$apa == 0} {
# Equal names, separate them if not the same type
set apa [expr {- [dict get $fD1 dir] \
+ [dict get $fD2 dir]}]
}
switch -- $apa {
0 {
set sts [$self ListFiles $fD1 $fD2 $node]
incr p1
incr p2
if {$sts eq "unknown"} {
set status_unknown 1
}
}
-1 {
$self ListFiles $fD1 "" $node
incr p1
set status_change 1
}
1 {
$self ListFiles "" $fD2 $node
incr p2
set status_change 1
}
}
} elseif {$p1 < $len1 && $p2 >= $len2} {
set fD1 [lindex $filesD1 $p1]
$self ListFiles $fD1 "" $node
incr p1
set status_change 1
} elseif {$p1 >= $len1 && $p2 < $len2} {
set fD2 [lindex $filesD2 $p1]
$self ListFiles "" $fD2 $node
incr p2
set status_change 1
} else {
break
}
}
if {$dir1 eq ""} {
|