diff --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -2885,21 +2885,25 @@ def grep(ui, repo, pattern, *pats, **opt fm.plain(uipathfn(fn), label='grep.filename') cols = [ - ('rev', '%d', rev, not plaingrep), - ('linenumber', '%d', l.linenum, opts.get('line_number')), + ('rev', '%d', rev, not plaingrep, ''), + ('linenumber', '%d', l.linenum, opts.get('line_number'), ''), ] if diff: - cols.append(('change', '%s', change, True)) + cols.append( + ('change', '%s', change, True, + 'grep.inserted ' if change == '+' else 'grep.deleted ') + ) cols.extend([ - ('user', '%s', formatuser(ctx.user()), opts.get('user')), + ('user', '%s', formatuser(ctx.user()), opts.get('user'), ''), ('date', '%s', fm.formatdate(ctx.date(), datefmt), - opts.get('date')), + opts.get('date'), ''), ]) - for name, fmt, data, cond in cols: + for name, fmt, data, cond, extra_label in cols: if cond: fm.plain(sep, label='grep.sep') field = fieldnamemap.get(name, name) - fm.condwrite(cond, field, fmt, data, label='grep.%s' % name) + label = extra_label + ('grep.%s' % name) + fm.condwrite(cond, field, fmt, data, label=label) if not opts.get('files_with_matches'): fm.plain(sep, label='grep.sep') if not opts.get('text') and binary(): diff --git a/tests/test-grep.t b/tests/test-grep.t --- a/tests/test-grep.t +++ b/tests/test-grep.t @@ -299,6 +299,10 @@ Test wdir color:3:+:orange color:2:-:orange color:1:+:orange + $ hg grep --diff orange --color=debug + [grep.filename|color][grep.sep|:][grep.rev|3][grep.sep|:][grep.inserted grep.change|+][grep.sep|:][grep.match|orange] + [grep.filename|color][grep.sep|:][grep.rev|2][grep.sep|:][grep.deleted grep.change|-][grep.sep|:][grep.match|orange] + [grep.filename|color][grep.sep|:][grep.rev|1][grep.sep|:][grep.inserted grep.change|+][grep.sep|:][grep.match|orange] $ hg grep --diff orange color:3:+:orange