Eskil

Check-in [e1a6e25443]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Use dicts down to ListFiles method.
Downloads: Tarball | ZIP archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: e1a6e254436964e020e41e6a536d40372843ba96
User & Date: peter 2014-07-21 00:17:58.218
Context
2014-07-21
00:37
Use file dictinoary down to CompareFiles check-in: 42caa7a2a8 user: peter tags: trunk
00:17
Use dicts down to ListFiles method. check-in: e1a6e25443 user: peter tags: trunk
2014-07-20
23:50
Pass dirdiff preferences as a dict check-in: 2895f46ba0 user: peter tags: trunk
Changes
Unified Diff Ignore Whitespace Patch
Changes to src/dirdiff.tcl.
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 ""} {