diff --git a/rhodecode/lib/vcs/backends/git/changeset.py b/rhodecode/lib/vcs/backends/git/changeset.py --- a/rhodecode/lib/vcs/backends/git/changeset.py +++ b/rhodecode/lib/vcs/backends/git/changeset.py @@ -194,6 +194,11 @@ class GitChangeset(BaseChangeset): return _prev(self, branch) + def diff(self, ignore_whitespace=True, context=3): + return ''.join(self.repository.get_diff(self, self.parents[0], + ignore_whitespace=ignore_whitespace, + context=context)) + def get_file_mode(self, path): """ Returns stat mode of the file at the given ``path``. diff --git a/rhodecode/lib/vcs/backends/git/repository.py b/rhodecode/lib/vcs/backends/git/repository.py --- a/rhodecode/lib/vcs/backends/git/repository.py +++ b/rhodecode/lib/vcs/backends/git/repository.py @@ -437,6 +437,12 @@ class GitRepository(BaseRepository): if ignore_whitespace: flags.append('-w') + if hasattr(rev1, 'raw_id'): + rev1 = getattr(rev1, 'raw_id') + + if hasattr(rev2, 'raw_id'): + rev2 = getattr(rev2, 'raw_id') + if rev1 == self.EMPTY_CHANGESET: rev2 = self.get_changeset(rev2).raw_id cmd = ' '.join(['show'] + flags + [rev2]) diff --git a/rhodecode/lib/vcs/backends/hg/changeset.py b/rhodecode/lib/vcs/backends/hg/changeset.py --- a/rhodecode/lib/vcs/backends/hg/changeset.py +++ b/rhodecode/lib/vcs/backends/hg/changeset.py @@ -136,6 +136,11 @@ class MercurialChangeset(BaseChangeset): return _prev(self, branch) + def diff(self, ignore_whitespace=True, context=3): + return ''.join(self._ctx.diff(git=True, + ignore_whitespace=ignore_whitespace, + context=context)) + def _fix_path(self, path): """ Paths are stored without trailing slash so we need to get rid off it if