Cdiff ===== Term based tool to view **colored**, **incremental** diff in *git/svn/hg* workspace, given patch or two files, or from stdin, with **side by side** and **auto pager** support. Requires python (>= 2.5.0) and ``less``. .. image:: http://ymattw.github.com/cdiff/img/default.png :alt: default :align: center .. image:: http://ymattw.github.com/cdiff/img/side-by-side.png :alt: side by side :align: center :width: 900 px Installation ------------ Install with pip ~~~~~~~~~~~~~~~~ Cdiff is already listed on `PyPI `_, you can install with ``pip`` if you have the tool. .. code:: sh sudo pip install cdiff Install with setup.py ~~~~~~~~~~~~~~~~~~~~~ You can also run the setup.py from the source if you don't have ``pip``. .. code:: sh git clone https://github.com/ymattw/cdiff.git cd cdiff sudo ./setup.py install Download directly ~~~~~~~~~~~~~~~~~ Both ``pip`` and ``setup.py`` installs cdiff to system wide directory, if you want a minimal tool without the boring external dependencies (like me), just save `cdiff.py `_ to whatever directory which is in your ``$PATH``, for example, ``$HOME/bin`` is in my ``$PATH``, so I save the script there and name as ``cdiff``. .. code:: sh curl -ksS https://raw.github.com/ymattw/cdiff/master/cdiff.py > ~/bin/cdiff chmod +x ~/bin/cdiff Usage ----- Cdiff reads diff from diff (patch) file if given, or stdin if redirected, or diff produced by revision tool if in a git/svn/hg workspace. Use option ``-s`` to enable side by side view, and option ``-w N`` to set a text width other than default ``80``. See examples below. Show usage:: cdiff -h Read diff from local modification in a svn, git, or hg workspace: .. code:: sh cd proj-workspace cdiff # view colored incremental udiff cdiff -s # view side by side cdiff -s -w 90 # use text width 90 other than default 80 Pipe in a diff: .. code:: sh git log -p -2 | cdiff -s git show 15bfa5 | cdiff -s svn diff -r PREV | cdiff -s View a diff (patch) file: .. code:: sh cdiff foo.patch cdiff foo.patch -s cdiff foo.patch -s -w 90 View diff between two files (wrapper of ``diff``):: cdiff foo foo.new # equivalent to diff -u foo foo.new | cdiff cdiff foo foo.new -s Redirect output to another patch file is safe: .. code:: sh svn diff | cdiff -s > my.patch Notes ----- - Works with python >= 2.5.0 (subprocess.Popen seems not working with PIPE in 2.4.3, maybe you can fix it) - Only takes unified diff for input - Side by side mode has alignment problem for wide chars Pull request is very welcome, make sure run ``make test`` to verify. It only has minimal verification today and that depends on human eyes too (`issue #7 `_). Single commit in pull request would make it easier for review, for example to collapse last 3 commits into 1 before *push*, use ``git rebase -i HEAD~3``, *pick* the first and *squash* the other two. See also -------- I have another tool `coderev `_ which 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 invented `cdiff`. Idea of ansi color markup is also from project `colordiff `_.