View colored, incremental diff in a workspace or from stdin, with side by side and auto pager support
Project description
Cdiff
=====
.. image:: https://travis-ci.org/ymattw/cdiff.png?branch=master
:target: https://travis-ci.org/ymattw/cdiff
:alt: Build status
Term based tool to view *colored*, *incremental* diff in a *Git/Mercurial/Svn*
workspace or from stdin, with *side by side* and *auto pager* support. Requires
python (>= 2.5.0) and ``less``.
.. image:: https://raw.github.com/ymattw/cdiff/gh-pages/img/default.png
:alt: default
:align: center
.. image:: https://raw.github.com/ymattw/cdiff/gh-pages/img/side-by-side.png
:alt: side by side
:align: center
:width: 900 px
Installation
------------
Install with pip
~~~~~~~~~~~~~~~~
Cdiff is already listed on `PyPI <http://pypi.python.org/pypi/cdiff>`_, you can
install with ``pip`` if you have the tool.
.. code:: sh
pip install --upgrade 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
./setup.py install
Download directly
~~~~~~~~~~~~~~~~~
Just save `cdiff.py <https://raw.github.com/ymattw/cdiff/master/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 -sSL https://raw.github.com/ymattw/cdiff/master/cdiff.py > ~/bin/cdiff
chmod +x ~/bin/cdiff
Usage
-----
Type ``cdiff -h`` to 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, 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
Read diff from local modification in a *Git/Mercurial/Svn* workspace (output
from e.g. ``git diff``, ``svn diff``):
.. code:: sh
cd proj-workspace
cdiff # view colored incremental diff
cdiff -s # view side by side
cdiff -s -w 90 # use text width 90 other than default 80
cdiff -s file1 dir2 # view modification of given files/dirs only
cdiff -s -w90 -- -U10 # pass '-U10' to underneath revision diff tool
cdiff -s -w90 -U10 # '--' is optional as it's unknown to cdiff
cdiff -s --cached # show git staged diff (git diff --cached)
cdiff -s -r1234 # show svn diff to revision 1234
Read log with changes in a *Git/Mercurial/Svn* workspace (output from e.g.
``git log -p``, ``svn log --diff``), note *--diff* option is new in svn 1.7.0:
.. code:: sh
cd proj-workspace
cdiff -l # read log along with changes
cdiff -ls # equivalent to cdiff -l -s, view side by side
cdiff -ls -w90 # set text width 90 as well
cdiff -ls file1 dir2 # see log with changes of given files/dirs only
Pipe in a diff:
.. code:: sh
git log -p -2 | cdiff # view git log with changes of last 2 commits
git show 15bfa | cdiff -s # view a given git commit, side by side
svn diff -r1234 | cdiff -s # view svn diff comparing to given revision
diff -u file1 file2 | cdiff # view diff between two files (note the '-u')
diff -ur dir1 dir2 | cdiff # view diff between two dirs
# View diff in a GitHub pull request, side by side
curl https://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.patch
Redirect output to another patch file is safe:
.. code:: sh
svn diff -r PREV | cdiff -s > my.patch
Notes
-----
Cdiff has following known issues:
- Does not recognize `normal` diff, and depends on ``filterdiff`` (patchutils)
to read `context` diff
- Side by side mode has alignment problem for wide chars
- Terminal might be in a mess on exception (type ``reset`` can fix it)
Pull requests are very welcome, please make sure your changes can pass unit
tests and regression tests by run ``make test`` (required tool *coverage* can
be installed with ``pip install coverage``). Also watch out `travis build
<https://travis-ci.org/ymattw/cdiff/pull_requests>`_ after push, make sure it
passes as well.
See also
--------
I have another tool `coderev <https://github.com/ymattw/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
<https://github.com/daveewart/colordiff>`_.
Change log
==========
Version 0.9.4 (2014-06-04)
- Respect the `LESS' environment variable
- Support python 3.4
- Fix curl options in document
Version 0.9.3 (2013-09-28)
- Moved screenshots to 'gh-pages' branch
- Handle all keyboard interrupts more completely
- Explicitly set default encoding to utf-8
- Fixed broken output diff when I/O with filterdiff in nonblocking mode
Version 0.9.2 (2013-06-21)
- Enahanced option parser now pass unknown option to underneath revision
control, user can use `cdiff --cached`, `cdiff -U5` directly
Version 0.9.1 (2013-05-20)
- Use `--no-ext-diff` to disable GIT_EXTERNAL_DIFF and diff.external which
might break cdiff output
Version 0.9 (2013-03-23)
- Supports reading context diff via ``filterdiff`` (patchutils)
- Fixed a diff parser bug which misread git commit message as common line
- Lots of code refactor
Version 0.8 (2013-03-13)
- Parser is now robust enough to handle dangling headers and short patch
- PEP8 (with minor own flavors) and other code lint
- Change 'Development Status' to stable
Version 0.7.1 (2013-02-25)
- Handle 'Binary files ... differ'
- Document update for known issues
Version 0.7 (2013-02-23)
- Support reading diff or log for given files/dirs in workspace
- Support diff generated from ``diff -ru dir1 dir2``
- Usage change: reading a patch and comparing two files need stdin redirect
Version 0.6 (2013-02-20)
- A few performance tuning and code clean up
- Add unit test cases with coverage 70%
- Show merge history in svn log
Version 0.5.1 (2013-02-19)
- Fixed incorrect yield on diff missing eof
- Fixed a bug in diff format probe
- Handle keyboard interrupt and large diffs in non-color mode
- Code clean up
Version 0.5 (2013-02-18)
- Support read output from ``svn diff --log`` and ``hg log -p``
- Streamline reading large patch set
- New ``--log (-l)`` option to read revision control diff log (thanks to
`Steven Myint`_)
Version 0.4 (2013-02-16)
- New option *-c WHEN* (*--color WHEN*) to support auto test
- Auto regression test now on Travis
Version 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 management
Version 0.1 (2013-02-05)
- New --version option
- setup.py now read version from source code
Version 0.0.4 (2013-02-04)
- Add CHANGES for history track and better versioning
Version 0.0.3 (2013-02-04)
- Publish on PyPI, supports read patch from file, pipe and diff output from
revision tools (thanks to `Steven Myint`_)
.. _Steven Myint: https://github.com/myint
=====
.. image:: https://travis-ci.org/ymattw/cdiff.png?branch=master
:target: https://travis-ci.org/ymattw/cdiff
:alt: Build status
Term based tool to view *colored*, *incremental* diff in a *Git/Mercurial/Svn*
workspace or from stdin, with *side by side* and *auto pager* support. Requires
python (>= 2.5.0) and ``less``.
.. image:: https://raw.github.com/ymattw/cdiff/gh-pages/img/default.png
:alt: default
:align: center
.. image:: https://raw.github.com/ymattw/cdiff/gh-pages/img/side-by-side.png
:alt: side by side
:align: center
:width: 900 px
Installation
------------
Install with pip
~~~~~~~~~~~~~~~~
Cdiff is already listed on `PyPI <http://pypi.python.org/pypi/cdiff>`_, you can
install with ``pip`` if you have the tool.
.. code:: sh
pip install --upgrade 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
./setup.py install
Download directly
~~~~~~~~~~~~~~~~~
Just save `cdiff.py <https://raw.github.com/ymattw/cdiff/master/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 -sSL https://raw.github.com/ymattw/cdiff/master/cdiff.py > ~/bin/cdiff
chmod +x ~/bin/cdiff
Usage
-----
Type ``cdiff -h`` to 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, 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
Read diff from local modification in a *Git/Mercurial/Svn* workspace (output
from e.g. ``git diff``, ``svn diff``):
.. code:: sh
cd proj-workspace
cdiff # view colored incremental diff
cdiff -s # view side by side
cdiff -s -w 90 # use text width 90 other than default 80
cdiff -s file1 dir2 # view modification of given files/dirs only
cdiff -s -w90 -- -U10 # pass '-U10' to underneath revision diff tool
cdiff -s -w90 -U10 # '--' is optional as it's unknown to cdiff
cdiff -s --cached # show git staged diff (git diff --cached)
cdiff -s -r1234 # show svn diff to revision 1234
Read log with changes in a *Git/Mercurial/Svn* workspace (output from e.g.
``git log -p``, ``svn log --diff``), note *--diff* option is new in svn 1.7.0:
.. code:: sh
cd proj-workspace
cdiff -l # read log along with changes
cdiff -ls # equivalent to cdiff -l -s, view side by side
cdiff -ls -w90 # set text width 90 as well
cdiff -ls file1 dir2 # see log with changes of given files/dirs only
Pipe in a diff:
.. code:: sh
git log -p -2 | cdiff # view git log with changes of last 2 commits
git show 15bfa | cdiff -s # view a given git commit, side by side
svn diff -r1234 | cdiff -s # view svn diff comparing to given revision
diff -u file1 file2 | cdiff # view diff between two files (note the '-u')
diff -ur dir1 dir2 | cdiff # view diff between two dirs
# View diff in a GitHub pull request, side by side
curl https://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.patch
Redirect output to another patch file is safe:
.. code:: sh
svn diff -r PREV | cdiff -s > my.patch
Notes
-----
Cdiff has following known issues:
- Does not recognize `normal` diff, and depends on ``filterdiff`` (patchutils)
to read `context` diff
- Side by side mode has alignment problem for wide chars
- Terminal might be in a mess on exception (type ``reset`` can fix it)
Pull requests are very welcome, please make sure your changes can pass unit
tests and regression tests by run ``make test`` (required tool *coverage* can
be installed with ``pip install coverage``). Also watch out `travis build
<https://travis-ci.org/ymattw/cdiff/pull_requests>`_ after push, make sure it
passes as well.
See also
--------
I have another tool `coderev <https://github.com/ymattw/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
<https://github.com/daveewart/colordiff>`_.
Change log
==========
Version 0.9.4 (2014-06-04)
- Respect the `LESS' environment variable
- Support python 3.4
- Fix curl options in document
Version 0.9.3 (2013-09-28)
- Moved screenshots to 'gh-pages' branch
- Handle all keyboard interrupts more completely
- Explicitly set default encoding to utf-8
- Fixed broken output diff when I/O with filterdiff in nonblocking mode
Version 0.9.2 (2013-06-21)
- Enahanced option parser now pass unknown option to underneath revision
control, user can use `cdiff --cached`, `cdiff -U5` directly
Version 0.9.1 (2013-05-20)
- Use `--no-ext-diff` to disable GIT_EXTERNAL_DIFF and diff.external which
might break cdiff output
Version 0.9 (2013-03-23)
- Supports reading context diff via ``filterdiff`` (patchutils)
- Fixed a diff parser bug which misread git commit message as common line
- Lots of code refactor
Version 0.8 (2013-03-13)
- Parser is now robust enough to handle dangling headers and short patch
- PEP8 (with minor own flavors) and other code lint
- Change 'Development Status' to stable
Version 0.7.1 (2013-02-25)
- Handle 'Binary files ... differ'
- Document update for known issues
Version 0.7 (2013-02-23)
- Support reading diff or log for given files/dirs in workspace
- Support diff generated from ``diff -ru dir1 dir2``
- Usage change: reading a patch and comparing two files need stdin redirect
Version 0.6 (2013-02-20)
- A few performance tuning and code clean up
- Add unit test cases with coverage 70%
- Show merge history in svn log
Version 0.5.1 (2013-02-19)
- Fixed incorrect yield on diff missing eof
- Fixed a bug in diff format probe
- Handle keyboard interrupt and large diffs in non-color mode
- Code clean up
Version 0.5 (2013-02-18)
- Support read output from ``svn diff --log`` and ``hg log -p``
- Streamline reading large patch set
- New ``--log (-l)`` option to read revision control diff log (thanks to
`Steven Myint`_)
Version 0.4 (2013-02-16)
- New option *-c WHEN* (*--color WHEN*) to support auto test
- Auto regression test now on Travis
Version 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 management
Version 0.1 (2013-02-05)
- New --version option
- setup.py now read version from source code
Version 0.0.4 (2013-02-04)
- Add CHANGES for history track and better versioning
Version 0.0.3 (2013-02-04)
- Publish on PyPI, supports read patch from file, pipe and diff output from
revision tools (thanks to `Steven Myint`_)
.. _Steven Myint: https://github.com/myint
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
cdiff-0.9.4.tar.gz
(30.1 kB
view details)
File details
Details for the file cdiff-0.9.4.tar.gz
.
File metadata
- Download URL: cdiff-0.9.4.tar.gz
- Upload date:
- Size: 30.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 41ba56db6629d634f263c0ea450b1fab68363ae5dc98bcab3b5c96e4a6183e87 |
|
MD5 | 4a0b5725e93f51ca3187d290a38b374c |
|
BLAKE2b-256 | ffda8da6d947f2d5c3385808c6c0a208e14c0184ad9def6cd43329277c582a35 |