Package: cdiff
CdiffTerm based tool to viewcolored,incrementaldiff in aGit/Mercurial/Svnworkspace or from stdin, withside by sideandauto pagersupport. Requires
python (>= 2.5.0) andless.InstallationInstall with pipCdiff is already listed onPyPI, you can install withpipif you have
the tool.pipinstall--upgradecdiffInstall with setup.pyYou can also run the setup.py from the source if you don’t havepip.gitclonehttps://github.com/ymattw/cdiff.gitcdcdiff./setup.pyinstallInstall with HomebrewYou can also install with Homebrew on Mac. (Thanks to@josa42,@bfontaine,@hivehandand@nijikonfor contributing to the HomebrewFormula).brewinstallcdiffDownload directlyJust savecdiff.pyto whatever directory which is in your$PATH, for
example,$HOME/binis in my$PATH, so I save the script there and name
ascdiff.curl-ksSLhttps://raw.github.com/ymattw/cdiff/master/cdiff.py>~/bin/cdiffchmod+x~/bin/cdiffUsageTypecdiff-hto show usage:$ cdiff -h
Usage: cdiff [options] [file|dir ...]

View colored, incremental diff in a workspace or from stdin, with side by side
and auto pager support

Options:
  --version           show program's version number and exit
  -h, --help          show this help message and exit
  -s, --side-by-side  enable side-by-side mode
  -w N, --width=N     set text width for side-by-side mode, 0 for auto
                      detection, default is 80
  -l, --log           show log with changes from revision control
  -c M, --color=M     colorize mode 'auto' (default), 'always', or 'never'

  Note:
    Option parser will stop on first unknown option and pass them down to
    underneath revision control. Environment variable CDIFF_OPTIONS may be
    used to specify default options that will be placed at the beginning
    of the argument list.Read diff from local modification in aGit/Mercurial/Svnworkspace (output
from e.g.git diff,svn diff):cdproj-workspacecdiff# view colored incremental diffcdiff-s# view side by side, use default text width 80cdiff-s-w90# use text width 90 other than default 80cdiff-s-w0# auto set text width based on terminal sizecdiff-sfile1dir2# view modification of given files/dirs onlycdiff-s-w90---U10# pass '-U10' to underneath revision diff toolcdiff-s-w90-U10# '--' is optional as it's unknown to cdiffcdiff-s--cached# show git staged diff (git diff --cached)cdiff-s-r1234# show svn diff to revision 1234Read log with changes in aGit/Mercurial/Svnworkspace (output from e.g.git log-p,svn log--diff), note–diffoption is new in svn 1.7.0:cdproj-workspacecdiff-l# read log along with changescdiff-ls# equivalent to cdiff -l -s, view side by sidecdiff-ls-w90# set text width 90 as wellcdiff-lsfile1dir2# see log with changes of given files/dirs onlyEnvironment variableCDIFF_OPTIONSmay be used to specify default options
that will be placed at the beginning of the argument list, for example:exportCDIFF_OPTIONS='-s -w0'cdifffoo# equivalent to "cdiff -s -w0 foo"If you feel more comfortable with a command such asgit cdiffto trigger
the cdiff command, you may symlink the executable to one namedgit-cdiffas follows:cdiff_dir=$(dirname$(whichcdiff))ln-s"${cdiff_dir}/cdiff""${cdiff_dir}/git-cdiff"Pipe in a diff:gitlog-p-2|cdiff# view git log with changes of last 2 commitsgitshow15bfa|cdiff-s# view a given git commit, side by sidesvndiff-r1234|cdiff-s# view svn diff comparing to given revisiondiff-ufile1file2|cdiff# view diff between two files (note the '-u')diff-urdir1dir2|cdiff# view diff between two dirs# View diff in a GitHub pull request, side by sidecurlhttps://github.com/ymattw/cdiff/pull/11.diff|cdiff-s# View a patch file in unified or context format, the latter depends on
# command `filterdiff` from package `patchutils` which is available in
# major Linux distros and MacPorts.
#cdiff-s<foo.patchRedirect output to another patch file is safe:svndiff-rPREV|cdiff-s>my.patchNotesCdiff has following known issues:Does not recognizenormaldiff, and depends onfilterdiff(patchutils)
to readcontextdiffSide by side mode has alignment problem for wide charsTerminal might be in a mess on exception (typeresetcan fix it)Pull requests are very welcome, please make sure your changes can pass unit
tests and regression tests by runmake test(required toolcoveragecan
be installed withpip install coverage).  Also watch outtravis buildafter push, make sure it passes as well.See alsoI have another toolcoderevwhich generates side-by-side diff pages for code
review from two given files or directories, I found it’s not easy to extend to
support git so inventedcdiff.  Idea of ansi color markup is also from
projectcolordiff.Change logVersion 1.0 (2016-12-31)Use environment variableCDIFF_OPTIONSto hold default optionsVersion 0.9.8 (2016-01-16)More robust parser to tolerate evil unified diffVersion 0.9.7 (2015-04-24)Fix unexpected side-by-side output for diff of diffBetter color to work with solarized color schemeVersion 0.9.6 (2014-06-20)Fix TypeError exception in auto width logicVersion 0.9.5 (2014-06-19)Option--width0now fits terminal size automaticallyEnable smooth horizontal scrolling with less option--shift1Version 0.9.4 (2014-06-04)Respect theLESSenvironment variableSupport python 3.4Fix curl options in documentVersion 0.9.3 (2013-09-28)Moved screenshots to ‘gh-pages’ branchHandle all keyboard interrupts more completelyExplicitly set default encoding to utf-8Fixed broken output diff when I/O with filterdiff in nonblocking modeVersion 0.9.2 (2013-06-21)Enahanced option parser now pass unknown option to underneath revision
control, user can usecdiff--cached,cdiff-U5directlyVersion 0.9.1 (2013-05-20)Use--no-ext-diffto disable GIT_EXTERNAL_DIFF and diff.external which
might break cdiff outputVersion 0.9 (2013-03-23)Supports reading context diff viafilterdiff(patchutils)Fixed a diff parser bug which misread git commit message as common lineLots of code refactorVersion 0.8 (2013-03-13)Parser is now robust enough to handle dangling headers and short patchPEP8 (with minor own flavors) and other code lintChange ‘Development Status’ to stableVersion 0.7.1 (2013-02-25)Handle ‘Binary files … differ’Document update for known issuesVersion 0.7 (2013-02-23)Support reading diff or log for given files/dirs in workspaceSupport diff generated fromdiff-rudir1 dir2Usage change: reading a patch and comparing two files need stdin redirectVersion 0.6 (2013-02-20)A few performance tuning and code clean upAdd unit test cases with coverage 70%Show merge history in svn logVersion 0.5.1 (2013-02-19)Fixed incorrect yield on diff missing eofFixed a bug in diff format probeHandle keyboard interrupt and large diffs in non-color modeCode clean upVersion 0.5 (2013-02-18)Support read output fromsvn diff--logandhg log-pStreamline reading large patch setNew--log(-l)option to read revision control diff log (thanks toSteven Myint)Version 0.4 (2013-02-16)New option-c WHEN(–color WHEN) to support auto testAuto regression test now on TravisVersion 0.3 (2013-02-07)Support compare two files (wrapper of diff)Version 0.2 (2013-02-06)Move cdiff.py to top dir for better meta info managementVersion 0.1 (2013-02-05)New –version optionsetup.py now read version from source codeVersion 0.0.4 (2013-02-04)Add CHANGES for history track and better versioningVersion 0.0.3 (2013-02-04)Publish on PyPI, supports read patch from file, pipe and diff output from
revision tools (thanks toSteven Myint)