Package: ydiff
YdiffTerm based tool to viewcolored,incrementaldiff in a version controlled
workspace (supports Git, Mercurial, Perforce and Svn so far) or from stdin,
withside by side(similar todiff-y) andauto pagersupport. Requires
python (>= 2.5.0) andless.InstallationInstall with pipYdiff is already listed onPyPI, you can install withpipif you have
the tool.pipinstall--upgradeydiffInstall with setup.pyYou can also run the setup.py from the source if you don’t havepip.gitclonehttps://github.com/ymattw/ydiff.gitcdydiff./setup.pyinstallInstall with HomebrewYou can also install with Homebrew on Mac. (Thanks to@josa42,@bfontaine,@hivehandand@nijikonfor contributing to the HomebrewFormula).brewinstallydiffInstall on FedoraOn Fedora, you can install ydiff with dnf.dnfinstallydiffInstall on FreeBSDOn FreeBSD, you can install ydiff with pkg.pkginstallydiffDownload directlyJust saveydiff.pyto whatever directory which is in your$PATH, for
example,$HOME/binis in my$PATH, so I save the script there and name
asydiff.curl-ksSLhttps://raw.github.com/ymattw/ydiff/master/ydiff.py>~/bin/ydiffchmod+x~/bin/ydiffUsageTypeydiff-hto show usage:$ ydiff -h
Usage: ydiff [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'
  -t N, --tab-width=N  convert tab characters to this many spaces (default: 8)
  --wrap               wrap long lines in side-by-side view
  -p M, --pager=M      pager application, suggested values are 'less' or 'cat'
  -o M, --pager-options=M
                       options to supply to pager application

  Note:
    Option parser will stop on first unknown option and pass them down to
    underneath revision control. Environment variable YDIFF_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/Perforce/Svnworkspace
(output from e.g.git diff,svn diff):cdproj-workspaceydiff# view colored incremental diffydiff-s# view side by side, use default text width 80ydiff-s-w90# use text width 90 other than default 80ydiff-s-w0# auto set text width based on terminal sizeydiff-s-w0--wrap# same as before, but also wrap long linesydiff-sfile1dir2# view modification of given files/dirs onlyydiff-s-w90--wrap---U10# pass '-U10' to underneath revision diff toolydiff-s-w90--wrap-U10# '--' is optional as it's unknown to ydiffydiff-s--cached# show git staged diff (git diff --cached)ydiff-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-workspaceydiff-l# read log along with changesydiff-ls# equivalent to ydiff -l -s, view side by sideydiff-ls-w90--wrap# set text width 90 and enable wrapping as wellydiff-lsfile1dir2# see log with changes of given files/dirs onlyUtilize a specific pager application:ydiff# default pager - lessLESS_OPTS='-FRSX --shift 1'ydiff-pless-o"${LESS_OPTS}"# emulate default pagerydiff-p/usr/bin/less# custom pagerydiff-pcat# non-paging ANSI processor for colorizingPipe in a diff:gitlog-p-2|ydiff# view git log with changes of last 2 commitsgitshow15bfa|ydiff-s# view a given git commit, side by sidesvndiff-r1234|ydiff-s# view svn diff comparing to given revisiondiff-ufile1file2|ydiff# view diff between two files (note the '-u')diff-urdir1dir2|ydiff# view diff between two dirs# View diff in a GitHub pull request, side by sidecurlhttps://github.com/ymattw/ydiff/pull/11.diff|ydiff-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.
#ydiff-s<foo.patchRedirect output to another patch file is safe:svndiff-rPREV|ydiff-s>my.patchEnvironment variableEnvironment variableYDIFF_OPTIONSmay be used to specify default options
that will be placed at the beginning of the argument list, for example:exportYDIFF_OPTIONS='-s -w0 --wrap'ydifffoo# equivalent to "ydiff -s -w0 --wrap foo"Note the default pagerlesstakes options from the environment variableLESS.NotesIf you feel more comfortable with a command such asgit ydiffto trigger
the ydiff command, you may symlink the executable to one namedgit-ydiffas follows:ydiff_dir=$(dirname$(whichydiff))ln-s"${ydiff_dir}/ydiff""${ydiff_dir}/git-ydiff"Known issuesYdiff 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 inventedydiff.  Idea of ansi color markup is also from
projectcolordiff.Change logVersion 1.2 (2020-08-08)Support perforce workspacesSupport pager customization via –pager and –pager_optionsSupport running on Windows (requireslesswhich is offered by git-bash)Fix a bug where reading stdin does not work outside a CVS workspaceFix tab expansion, expands to the next stop modulo tab widthPerformance improvementVersion 1.1 (2018-06-05)Rename fromcdifftoydiffto avoid binary name conflict on major
distributions,CDIFF_OPTIONSstill works but will be deprepated soonNew option--wrapto wrap long lines in side-by-side viewVersion 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)