Version 28 of Eskil

Updated 2012-06-18 20:04:48 by spjuth
What: eskil
Where: http://eskil.tcl.tk/ 
Description: Eskil is a GUI frontend to diff.
        It supports several version control systems.
        It also does directory diff, conflict merge and more.
        Currently at version 2.6.2.
Updated: 06/2012
Contact: peter dot spjuth at gmail dot com

http://eskil.tcl.tk/index.html/doc/trunk/htdocs/eskil1.png

http://eskil.tcl.tk/index.html/doc/trunk/htdocs/eskil2.png

http://eskil.tcl.tk/index.html/doc/trunk/htdocs/eskil3.png

By Peter Spjuth

A similar but unrelated application is tkdiff.


Revision Control Support

Several revision control systems are supported for displaying differences between file revisions. When comparing uncommited changes to latest version, you can commit directly from Eskil (in some systems).

Currently Fossil, Git, Subversion, RCS, CVS, Bazaar, Mercurial, ClearCase and Perforce are supported.

eskil <file>
eskil -r 45ef34 -r 6783ef <file>
eskil -review
eskil -review <file1> <file2>...

Patch view

Eskil can display a patch, either from a file, from stdin, pasted from clipboard or generated from Revision Control Support.

eskil -patch <file>
someother | eskil -
git diff -p --diff-filter=M master | eskil -
fossil diff -r trunk | eskil -'
eskil -review

Directory Diff

Directory comparison is supported.

Eskil is starkit aware and will allow you to compare starkits/starpacks or, by comparing one to itself, browse kits. The kit needs to be either mentioned on the command line or called *.kit for it to work.


Conflict resolution

You can resolve merge conflicts using Eskil, including full 3-way merge. It can pick up conflict marks as typically left by revision control systems' merge.

eskil -conflict <file>
eskil -a <ancestor> <file1> <file2>

Comments about eskil

LV 2009 Oct 10 How can I configure eskil so that it does not display lines that are identical in the two files?

Peter Spjuth: Zero context is supported as of version 2.5.

LV 2007 Aug 06

Observations regarding eskil...

When I first attempted to invoke eskil, I got the following:

 $ tclkit eskil22.kit
 extra characters after close-brace
    while executing
 "return [uplevel 1 [list [namespace origin mcunknown]  $Locale $src {*}$args]] "
    (procedure "mc" line 24)
    invoked from within
 "mc $lab"
    (procedure "tk::MessageBox" line 79)
    invoked from within
 "tk::MessageBox {expand}$args"
    (procedure "tk_messageBox" line 2)
    invoked from within
 "tk_messageBox -icon error -message $msg -title "Fatal error""
    (procedure "panic" line 4)
    invoked from within
 "panic $::errorInfo"
    (procedure "starkit::header" line 10)
    invoked from within
 "starkit::header mk4 -readonly"
    (file "eskil22.kit" line 5)
 $ sdx.kit version /projects/sprs_lwv/tcl85/bin/tclkit
 2005/09/27 03:31:11  54267-20834  /projects/sprs_lwv/tcl85/bin/tclkit
 $ /projects/sprs_lwv/tcl85/bin/tclkit                
 % info patchlevel
 8.5a4

After a comment by Peter, I began to wonder if perhaps it was a tclkit error, rather than an eskil, so I tried eskil with an older tclkit and that worked just fine.

I then tried to use eskil with ActiveTcl 8.5's base-tk (which is, for a subset of starkits, a substitute) and found another issue. This time, I found that eskil includes only snit version 1 - but the snit toplevel, when it sees it is running under Tcl/Tk 8.5, attempts to use snit version 2.

Because that isn't included in eskil, a fatal error is generated.

Just a head's up if someone else runs into this problem. The current solution is either to update the snit in eskil to include both versions, or to go download an older version of a tclkit.

This should work in Eskil 2.3.


Anyone have a comparison of eskil versus http://www.winmerge.org/ ? While winmerge isn't written in Tcl, it has been recommended to me as a very good tool. I'm just curious how functionality matches.

Peter Spjuth: I haven't used winmerge but a quick glance shows they are roughly equal. Neither of them has a full 3-way merge, but Eskil has a separate merge window which I find friendlier. I don't see anything like Eskil's hierarchical directory diff in winmerge but I guess they must have something similar. I'm quite sure Eskil is alone in supporting comparison of starkits and starpacks though ;-)

MHo 2009-10-30: Just tried the newest winmerge. Unfortunally, it doesn't load. Some external dependencies don't resolve at my PC (VC redist 8.x). I hate those tools, which require me to load six new different runtimes each time I update...


LV From what I can tell, eskil 2.4 requires a tclkit with themed tk in it - probably Tk 8.5.