This just passes the --binary option to git-diff-*, which causes the generated diffs to contain an applyable diff even when binary files differ. It's necessary to do this if you want to mail patches to binary files. Signed-off-by: Karl Hasselström <kha@xxxxxxxxxxx> --- stgit/commands/diff.py | 6 +++++- stgit/commands/export.py | 5 ++++- stgit/commands/mail.py | 6 +++++- stgit/git.py | 16 ++++++++++++---- 4 files changed, 26 insertions(+), 7 deletions(-) diff --git a/stgit/commands/diff.py b/stgit/commands/diff.py index 8678a0a..d3e1190 100644 --- a/stgit/commands/diff.py +++ b/stgit/commands/diff.py @@ -44,6 +44,9 @@ shows the specified patch (defaulting to the current one).""" options = [make_option('-r', '--range', metavar = 'rev1[..[rev2]]', dest = 'revs', help = 'show the diff between revisions'), + make_option('--binary', + help = 'output a diff even for binary files', + action = 'store_true'), make_option('-s', '--stat', help = 'show the stat instead of the diff', action = 'store_true')] @@ -79,6 +82,7 @@ def func(parser, options, args): if options.stat: print git.diffstat(args, git_id(rev1), git_id(rev2)) else: - diff_str = git.diff(args, git_id(rev1), git_id(rev2)) + diff_str = git.diff(args, git_id(rev1), git_id(rev2), + binary = options.binary) if diff_str: pager(diff_str) diff --git a/stgit/commands/export.py b/stgit/commands/export.py index 79b8630..20d8f67 100644 --- a/stgit/commands/export.py +++ b/stgit/commands/export.py @@ -62,6 +62,9 @@ options = [make_option('-d', '--dir', help = 'Use FILE as a template'), make_option('-b', '--branch', help = 'use BRANCH instead of the default one'), + make_option('--binary', + help = 'output a diff even for binary files', + action = 'store_true'), make_option('-s', '--stdout', help = 'dump the patches to the standard output', action = 'store_true')] @@ -172,7 +175,7 @@ def func(parser, options, args): # write the diff git.diff(rev1 = patch.get_bottom(), rev2 = patch.get_top(), - out_fd = f) + out_fd = f, binary = options.binary) if not options.stdout: f.close() patch_no += 1 diff --git a/stgit/commands/mail.py b/stgit/commands/mail.py index 151a408..2fcaa5f 100644 --- a/stgit/commands/mail.py +++ b/stgit/commands/mail.py @@ -120,6 +120,9 @@ options = [make_option('-a', '--all', help = 'username for SMTP authentication'), make_option('-b', '--branch', help = 'use BRANCH instead of the default one'), + make_option('--binary', + help = 'output a diff even for binary files', + action = 'store_true'), make_option('-m', '--mbox', help = 'generate an mbox file instead of sending', action = 'store_true')] @@ -390,7 +393,8 @@ def __build_message(tmpl, patch, patch_nr, total_nr, msg_id, ref_id, options): # for backward template compatibility 'endofheaders': '', 'diff': git.diff(rev1 = git_id('%s//bottom' % patch), - rev2 = git_id('%s//top' % patch)), + rev2 = git_id('%s//top' % patch), + binary = options.binary), 'diffstat': git.diffstat(rev1 = git_id('%s//bottom'%patch), rev2 = git_id('%s//top' % patch)), # for backward template compatibility diff --git a/stgit/git.py b/stgit/git.py index 837f927..86630ce 100644 --- a/stgit/git.py +++ b/stgit/git.py @@ -771,20 +771,28 @@ def status(files = None, modified = False, new = False, deleted = False, else: print '%s' % fs[1] -def diff(files = None, rev1 = 'HEAD', rev2 = None, out_fd = None): +def diff(files = None, rev1 = 'HEAD', rev2 = None, out_fd = None, + binary = False): """Show the diff between rev1 and rev2 """ if not files: files = [] + args = [] + if binary: + args.append('--binary') + if rev1 and rev2: - diff_str = _output(['git-diff-tree', '-p', rev1, rev2, '--'] + files) + diff_str = _output(['git-diff-tree', '-p'] + args + + [rev1, rev2, '--'] + files) elif rev1 or rev2: refresh_index() if rev2: - diff_str = _output(['git-diff-index', '-p', '-R', rev2, '--'] + files) + diff_str = _output(['git-diff-index', '-p', '-R'] + + args + [rev2, '--'] + files) else: - diff_str = _output(['git-diff-index', '-p', rev1, '--'] + files) + diff_str = _output(['git-diff-index', '-p'] + + args + [rev1, '--'] + files) else: diff_str = '' - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html