Eskil

Check-in [03d4b03550]
Login

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

Overview
Comment:Started to refactor dirdiff code
Downloads: Tarball | ZIP archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: 03d4b0355032f178b89707ad091b3893fa415caa
User & Date: peter 2014-07-20 23:35:46.509
Context
2014-07-20
23:50
Pass dirdiff preferences as a dict check-in: 2895f46ba0 user: peter tags: trunk
23:35
Started to refactor dirdiff code check-in: 03d4b03550 user: peter tags: trunk
2014-02-05
17:41
Cleaned up Pref array usage to be consistent in all code. check-in: 255f3d94ce user: peter tags: trunk
Changes
Unified Diff Ignore Whitespace Patch
Changes to Changes.




1
2
3
4
5
6
7




2014-02-01
 Added a font fallback in psballon. [0ff6d72ab9]

2014-01-24
 Bumped revision to 2.6.5

2014-01-24
>
>
>
>







1
2
3
4
5
6
7
8
9
10
11
2014-08-12
 Started to refactor dirdiff code.
 This prepares for making dirdiff revision aware.

2014-02-01
 Added a font fallback in psballon. [0ff6d72ab9]

2014-01-24
 Bumped revision to 2.6.5

2014-01-24
Changes to Makefile.
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182

wrap:
	sdx wrap eskil.kit

wrapexe:
	@\rm -f eskil.linux eskil.exe eskil.solaris
	sdx wrap eskil.linux   -runtime $(TCLKIT_LINUX)
	sdx wrap eskil.solaris -runtime $(TCLKIT_SOLARIS)
	cd eskil.vfs/lib ; ln -s $(TWAPI) twapi
	sdx wrap eskil.exe     -runtime $(TCLKIT_WIN)
	rm eskil.vfs/lib/twapi

release: setup wrap wrapexe
	@cp eskil.kit eskil`date +%Y%m%d`.kit
	@cp eskil.kit eskil$(VERSION).kit
	@gzip eskil.linux
	@mv eskil.linux.gz eskil$(VERSION).linux.gz
	@gzip eskil.solaris
	@mv eskil.solaris.gz eskil$(VERSION).solaris.gz
	@zip eskil$(VERSION).win.zip eskil.exe
	@zip eskil`date +%Y%m%d`.win.zip eskil.exe







|









|
|


162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182

wrap:
	sdx wrap eskil.kit

wrapexe:
	@\rm -f eskil.linux eskil.exe eskil.solaris
	sdx wrap eskil.linux   -runtime $(TCLKIT_LINUX)
#	sdx wrap eskil.solaris -runtime $(TCLKIT_SOLARIS)
	cd eskil.vfs/lib ; ln -s $(TWAPI) twapi
	sdx wrap eskil.exe     -runtime $(TCLKIT_WIN)
	rm eskil.vfs/lib/twapi

release: setup wrap wrapexe
	@cp eskil.kit eskil`date +%Y%m%d`.kit
	@cp eskil.kit eskil$(VERSION).kit
	@gzip eskil.linux
	@mv eskil.linux.gz eskil$(VERSION).linux.gz
#	@gzip eskil.solaris
#	@mv eskil.solaris.gz eskil$(VERSION).solaris.gz
	@zip eskil$(VERSION).win.zip eskil.exe
	@zip eskil`date +%Y%m%d`.win.zip eskil.exe
Changes to src/dirdiff.tcl.
142
143
144
145
146
147
148
149


150
151
152
153
154
155
156























157
158
159

160
161
162
163
164
165
166
167
168

169
170
171
172
173
174


175

176
177
178
179
180
181
182

183
184
185
186
187
188
189
190
191
            close $ch1
            close $ch2
        }
    }
    return $eq
}

# Returns the contents of a directory as a sorted list of full file paths.


proc DirContents {dir} {
    if {$::tcl_platform(platform) eq "windows"} {
        # .-files are not treated specially on windows. * is enough to get all
        set files [glob -directory $dir -nocomplain *]
    } else {
        set files [glob -directory $dir -nocomplain * {.[a-zA-Z]*}]
    }
























    if {$::Pref(dir,onlyrev)} {
        # FIXA: move to rev and make general for other systems

        set entries [file join $dir CVS Entries]
        if {[file exists $entries]} {
            set ch [open $entries r]
            set data [read $ch]
            close $ch
            foreach line [split $data \n] {
                set name [lindex [split $line /] 1]
                set controlled($name) 1
            }

            set files2 {}
            foreach file $files {
                if {[info exists controlled($file)]} {
                    lappend files2 $file
                }
            }


            set files $files2

        }
    }

    set files2 {}
    foreach file $files {
        set full $file
        set tail [file tail $file]

        # Apply filters
        if {[FileIsDirectory $full]} {
            if {[llength $::Pref(dir,incdirs)] == 0} {
                set allowed 1
            } else {
                set allowed 0
                foreach pat $::Pref(dir,incdirs) {
                    if {[string match $pat $tail]} {
                        set allowed 1







|
>
>
|






>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>



>
|
|
|
|
|
|
|
|
<
>
|
|
|
|
<
<
>
>
|
>
|
|
<
|
|
|
|
>

|







142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193

194
195
196
197
198


199
200
201
202
203
204

205
206
207
208
209
210
211
212
213
214
215
216
217
218
            close $ch1
            close $ch2
        }
    }
    return $eq
}

# Returns the contents of a directory as a sorted list of file dicts
# By collecting as much as possible in one place, this prepares for a
# future expansion into revision control support in dirdiff.
proc DirContentsDRaw {dir} {
    if {$::tcl_platform(platform) eq "windows"} {
        # .-files are not treated specially on windows. * is enough to get all
        set files [glob -directory $dir -nocomplain *]
    } else {
        set files [glob -directory $dir -nocomplain * {.[a-zA-Z]*}]
    }
    set result {}
    foreach file [lsort -dictionary $files] {
        set fD [dict create "full" $file]
        dict set fD tail [file tail $file]
        dict set fD dir [FileIsDirectory $file]
        if {[catch {file stat $file stat}]} {
            dict set fD size ""
            dict set fD mtime ""
            dict set fD type ""
        } else {
            dict set fD size $stat(size)
            dict set fD mtime $stat(mtime)
            dict set fD type $stat(type)
        }
        lappend result $fD
    }
    return $result
}

# Returns the contents of a directory as a sorted list of dicts, after applying
# filter preferences.
proc DirContentsD {dir} {
    set filesD [DirContentsDRaw $dir]

    if {$::Pref(dir,onlyrev)} {
        # FIXA: move to rev and make general for other systems
        # FIXA: obsolete, not updated since before dictinaries were used
        #set entries [file join $dir CVS Entries]
        #if {[file exists $entries]} {
        #    set ch [open $entries r]
        #    set data [read $ch]
        #    close $ch
        #    foreach line [split $data \n] {
        #        set name [lindex [split $line /] 1]
        #        set controlled($name) 1

        #    }
        #    set files2 {}
        #    foreach file $files {
        #        if {[info exists controlled($file)]} {
        #            lappend files2 $file


        #        }
        #    }
        #    set files $files2
        #}
    }


    set filesD2 {}
    foreach fileD $filesD {
        set full [dict get $fileD full]
        set tail [dict get $fileD tail]
        set isDir [dict get $fileD "dir"]
        # Apply filters
        if {$isDir} {
            if {[llength $::Pref(dir,incdirs)] == 0} {
                set allowed 1
            } else {
                set allowed 0
                foreach pat $::Pref(dir,incdirs) {
                    if {[string match $pat $tail]} {
                        set allowed 1
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
                        set allowed 0
                        break
                    }
                }
            }
            if {!$allowed} continue
        }
        lappend files2 $full
    }

    return [Fsort $files2]
}

# Bring up an editor to display a file.
proc EditFile {file} {
    locateEditor ::util(editor)
    exec $::util(editor) $file &
}







|


|







247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
                        set allowed 0
                        break
                    }
                }
            }
            if {!$allowed} continue
        }
        lappend filesD2 $fileD
    }

    return $filesD2
}

# Bring up an editor to display a file.
proc EditFile {file} {
    locateEditor ::util(editor)
    exec $::util(editor) $file &
}
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874

875
876

877
878
879
880
881
882
883
884
885
886
887
888
889
            $w.bl configure -state disabled
        }
    }

    # Compare two directories.
    method CompareDirs {dir1 dir2 node} {
        if {$dir1 eq ""} {
            set files1 {}
        } else {
            set files1 [DirContents $dir1]
        }
        if {$dir2 eq ""} {
            set files2 {}
        } else {
            set files2 [DirContents $dir2]
        }

        set len1 [llength $files1]
        set len2 [llength $files2]

        set p1 0
        set p2 0
        set status_change 0
        set status_unknown 0
        while 1 {
            if {$p1 < $len1 && $p2 < $len2} {
                set df1 [lindex $files1 $p1]

                set f1 [file tail $df1]
                set df2 [lindex $files2 $p2]

                set f2 [file tail $df2]
                set apa [FStrCmp $f1 $f2]
                if {$apa == 0} {
                    # Equal names, separate them if not the same type
                    set apa [expr {- [FileIsDirectory $df1] \
                                   + [FileIsDirectory $df2]}]
                }

                switch -- $apa {
                    0 {
                        set sts [$self ListFiles $df1 $df2 $node]
                        incr p1
                        incr p2







|

|


|

|


|
|







|
>
|
|
>
|



|
|







875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
            $w.bl configure -state disabled
        }
    }

    # Compare two directories.
    method CompareDirs {dir1 dir2 node} {
        if {$dir1 eq ""} {
            set filesD1 {}
        } else {
            set filesD1 [DirContentsD $dir1]
        }
        if {$dir2 eq ""} {
            set filesD2 {}
        } else {
            set filesD2 [DirContentsD $dir2]
        }

        set len1 [llength $filesD1]
        set len2 [llength $filesD2]

        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
899
900
901
902
903
904
905
906

907
908
909
910
911

912
913
914
915
916
917
918
                    1 {
                        $self ListFiles "" $df2 $node
                        incr p2
                        set status_change 1
                    }
                }
            } elseif {$p1 < $len1 && $p2 >= $len2} {
                set df1 [lindex $files1 $p1]

                $self ListFiles $df1 "" $node
                incr p1
                set status_change 1
            } elseif {$p1 >= $len1 && $p2 < $len2} {
                set df2 [lindex $files2 $p2]

                $self ListFiles "" $df2 $node
                incr p2
                set status_change 1
            } else {
                break
            }
        }







|
>




|
>







928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
                    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
            }
        }
Changes to src/eskil.tcl.
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# Stop Tk from meddling with the command line by copying it first.
set ::eskil(argv) $::argv
set ::eskil(argc) $::argc
set ::argv {}
set ::argc 0

set ::eskil(debug) 0
set ::eskil(diffver) "Version 2.6.5 2014-01-24"
set ::eskil(thisScript) [file join [pwd] [info script]]

namespace import tcl::mathop::+
namespace import tcl::mathop::-
namespace import tcl::mathop::*
namespace import tcl::mathop::/








|







33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# Stop Tk from meddling with the command line by copying it first.
set ::eskil(argv) $::argv
set ::eskil(argc) $::argc
set ::argv {}
set ::argc 0

set ::eskil(debug) 0
set ::eskil(diffver) "Version 2.6.5+ 2014-08-12"
set ::eskil(thisScript) [file join [pwd] [info script]]

namespace import tcl::mathop::+
namespace import tcl::mathop::-
namespace import tcl::mathop::*
namespace import tcl::mathop::/