Commit e3d30c0d authored by Yuya Nishihara's avatar Yuya Nishihara
Browse files

annotate: add option to annotate working-directory files

Working revision or node is displayed with "+" suffix in plain output, but
null/None in machine-readable format.
parent 065b886f61c6
......@@ -266,6 +266,9 @@ def annotate(ui, repo, *pats, **opts):
anyway, although the results will probably be neither useful
nor desirable.
By default, annotate files in the parent of the working directory.
Use -r "wdir()" to annotate the working directory files.
Returns 0 on success.
"""
if not pats:
......@@ -276,16 +279,44 @@ def annotate(ui, repo, *pats, **opts):
# to mimic the behavior of Mercurial before version 1.5
opts['file'] = True
ctx = scmutil.revsingle(repo, opts.get('rev'))
fm = ui.formatter('annotate', opts)
if ui.quiet:
datefunc = util.shortdate
else:
datefunc = util.datestr
hexfn = fm.hexfunc
if ctx.rev() is None:
def hexfn(node):
if node is None:
return None
else:
return fm.hexfunc(node)
if opts.get('changeset'):
# omit "+" suffix which is appended to node hex
def formatrev(rev):
if rev is None:
return '%d' % ctx.p1().rev()
else:
return '%d' % rev
else:
def formatrev(rev):
if rev is None:
return '%d+' % ctx.p1().rev()
else:
return '%d ' % rev
def formathex(hex):
if hex is None:
return '%s+' % fm.hexfunc(ctx.p1().node())
else:
return '%s ' % hex
else:
hexfn = fm.hexfunc
formatrev = formathex = str
opmap = [('user', ' ', lambda x: x[0].user(), ui.shortuser),
('number', ' ', lambda x: x[0].rev(), str),
('changeset', ' ', lambda x: hexfn(x[0].node()), str),
('number', ' ', lambda x: x[0].rev(), formatrev),
('changeset', ' ', lambda x: hexfn(x[0].node()), formathex),
('date', ' ', lambda x: x[0].date(), util.cachefunc(datefunc)),
('file', ' ', lambda x: x[0].path(), str),
('line_number', ':', lambda x: x[1], str),
......@@ -315,7 +346,6 @@ def annotate(ui, repo, *pats, **opts):
def bad(x, y):
raise util.Abort("%s: %s" % (x, y))
ctx = scmutil.revsingle(repo, opts.get('rev'))
m = scmutil.match(ctx, pats, opts)
m.bad = bad
follow = not opts.get('no_follow')
......
......@@ -398,6 +398,76 @@ and its ancestor by overriding "repo._filecommit".
20: 4 baz:4
16: 5
annotate clean file
$ hg annotate -ncr "wdir()" foo
11 472b18db256d : foo
annotate modified file
$ echo foofoo >> foo
$ hg annotate -r "wdir()" foo
11 : foo
20+: foofoo
$ hg annotate -cr "wdir()" foo
472b18db256d : foo
b6bedd5477e7+: foofoo
$ hg annotate -ncr "wdir()" foo
11 472b18db256d : foo
20 b6bedd5477e7+: foofoo
$ hg annotate --debug -ncr "wdir()" foo
11 472b18db256d1e8282064eab4bfdaf48cbfe83cd : foo
20 b6bedd5477e797f25e568a6402d4697f3f895a72+: foofoo
$ hg annotate -udr "wdir()" foo
test Thu Jan 01 00:00:00 1970 +0000: foo
test [A-Za-z0-9:+ ]+: foofoo (re)
$ hg annotate -ncr "wdir()" -Tjson foo
[
{
"line": "foo\n",
"node": "472b18db256d1e8282064eab4bfdaf48cbfe83cd",
"rev": 11
},
{
"line": "foofoo\n",
"node": null,
"rev": null
}
]
annotate added file
$ echo bar > bar
$ hg add bar
$ hg annotate -ncr "wdir()" bar
20 b6bedd5477e7+: bar
annotate renamed file
$ hg rename foo renamefoo2
$ hg annotate -ncr "wdir()" renamefoo2
11 472b18db256d : foo
20 b6bedd5477e7+: foofoo
annotate missing file
$ rm baz
$ hg annotate -ncr "wdir()" baz
abort: No such file or directory: $TESTTMP/repo/baz
[255]
annotate removed file
$ hg rm baz
$ hg annotate -ncr "wdir()" baz
abort: No such file or directory: $TESTTMP/repo/baz
[255]
Test annotate with whitespace options
$ cd ..
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment