Eskil can compare versions in revision control systems.
Currently RCS, CVS, Git, Mercurial, Subversion and ClearCase are supported.
If you specify only one file on the command line to Eskil, it will automatically detect if the file is under revision control and enter revision control mode.
By default the local file is compared against the latest checked in version. This is for the common case when you just want to know what you have changed before checking in.
You can use the -r option to select which version to compare. It works like it does in "cvs diff". Examples:
<pre>eskil file.txt</pre>
Compare file.txt with the latest checked in version.
<pre>eskil -r rev file.txt</pre>
Compare file.txt with the specified version.
<pre>eskil -r rev1 -r rev2 file.txt</pre>
Compare the two revisions. This does not involve the local copy of file.txt.
The -r options are also available in the GUI in the "Rev 1" and "Rev 2" fields.
<ul>Commit support</ul>
When comparing a file with the latest checked in version, some of the systems have support for committing directly from Eskil. If supported, the Commit button will be enabled.
<ul>Priority between systems</ul>
If multiple systems are used within a directory Git/Hg will be detected before CVS/SVN. Command line options -cvs and -svn can be used to put preference on one of those systems.
<ul>Pipe a patch</ul>
Eskil can read a patch from standard input, thus allowing display from any patch generating command. Examples:
<pre>hg diff | eskil -</pre>
<pre>git diff -p --diff-filter=M master | eskil -</pre>
<ul>RCS/CVS</ul>
For RCS and CVS the arguments to -r are standard version numbers just like to their -r options. RCS style -r\u003crev\u003e is allowed.
If a revision is an integer, it is added to the last number in the current version, thus giving relative versions. E.g. -1 gives the second to last version.
<ul>Subversion</ul>
For Subversion the arguments to -r are standard version numbers just like its -r option. If a revision is a negative integer, it is added to the current version, thus giving relative versions. E.g. -1 gives the second to last version.
<ul>Git</ul>
Git currently only supports "HEAD" and "master" as -r options.
<ul>Mercurial</ul>
For Mercurial -r works as in "hg cat -r".
<ul>ClearCase</ul>
ClearCase has more complex version "numbers".
ClearCase stream names are built like file paths and in -r you can access the streams similar to how you find files.
Your current stream is the "current directory".
A negative version number is offset from latest.
<pre>-r 5 </pre>: Version 5 in current stream.
<pre>-r . </pre>: Latest version in current stream.
<pre>-r -1 </pre>: Second to last version in current stream.
<pre>-r /full/path/stream/4 </pre>: The identified version.
<pre>-r /full/path/stream </pre>: Latest version in that stream.
<pre>-r ../5 </pre>: Version in parent stream.
<pre>-r .. </pre>: Latest in parent stream.
<pre>-r stream/5 </pre>: Version in stream, anywhere in tree.
<pre>-r stream </pre>: Latest in stream, anywhere in tree.