Skip to content
Snippets Groups Projects
Commit f4a8d754cd0a authored by Yann E. MORIN's avatar Yann E. MORIN
Browse files

templates: add 'bisect' keyword to return a cset's bisect status


This new 'bisect' template expands to a cset's bisection status (good,
bad and so on...). There is also a new 'shortbisect' filter that yields
a single char representing the cset's bisection status.

It uses the two recently-added hbisect.label() and .shortlabel() functions.

Example output using the repository in test-bisect2.t, and some made-up
state of the 'end at merge' test (with graphlog, it's so explicit):

  $ hg glog --template '{rev}:{node|short} {bisect}\n'  \
            -r 'bisect(range)|bisect(ignored)'
  o  17:228c06deef46: bad
  |
  o  16:609d82a7ebae: bad (implicit)
  |
  o    15:857b178a7cf3: bad
  |\
  | o  13:b0a32c86eb31: good
  | |
  | o  12:9f259202bbe7: good (implicit)
  | |
  | o  11:82ca6f06eccd: good
  | |
  @ |    10:429fcd26f52d: untested
  |\ \
  | o |  9:3c77083deb4a: skipped
  | |/
  | o  8:dab8161ac8fc: good
  | |
  o |    6:a214d5d3811a: ignored
  |\ \
  | o |  5:385a529b6670: ignored
  | | |
  o | |  4:5c668c22234f: ignored
  | | |
  o | |  3:0950834f0a9c: ignored
  |/ /
  o /  2:051e12f87bf1: ignored
  |/

And now the same with the short label:

  $ hg log --template '{bisect|shortbisect} {rev}:{node|short}\n'
    18:d42e18c7bc9b
  B 17:228c06deef46
  B 16:609d82a7ebae
  B 15:857b178a7cf3
    14:faa450606157
  G 13:b0a32c86eb31
  G 12:9f259202bbe7
  G 11:82ca6f06eccd
  U 10:429fcd26f52d
  S 9:3c77083deb4a
  G 8:dab8161ac8fc
    7:50c76098bbf2
  I 6:a214d5d3811a
  I 5:385a529b6670
  I 4:5c668c22234f
  I 3:0950834f0a9c
  I 2:051e12f87bf1
    1:4ca5088da217
    0:33b1f9bc8bc5

Signed-off-by: default avatar"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parent aa2e908c521e
No related branches found
No related tags found
No related merge requests found
......@@ -7,6 +7,7 @@
import cgi, re, os, time, urllib
import encoding, node, util
import hbisect
def addbreaks(text):
""":addbreaks: Any text. Add an XHTML "<br />" tag before the end of
......@@ -268,6 +269,14 @@
"""
return text[:12]
def shortbisect(text):
""":shortbisect: Any text. Treats `text` as a bisection status, and
returns a single-character representing the status (G: good, B: bad,
S: skipped, U: untested, I: ignored). Returns single space if `text`
is not a valid bisection status.
"""
return hbisect.shortlabel(text) or ' '
def shortdate(text):
""":shortdate: Date. Returns a date like "2006-09-18"."""
return util.shortdate(text)
......@@ -347,6 +356,7 @@
"rfc3339date": rfc3339date,
"rfc822date": rfc822date,
"short": short,
"shortbisect": shortbisect,
"shortdate": shortdate,
"stringescape": stringescape,
"stringify": stringify,
......
......@@ -7,6 +7,7 @@
from node import hex
import patch, util, error
import hbisect
def showlist(name, values, plural=None, **args):
'''expand set of values.
......@@ -145,6 +146,10 @@
""":author: String. The unmodified author of the changeset."""
return ctx.user()
def showbisect(repo, ctx, templ, **args):
""":bisect: String. The changeset bisection status."""
return hbisect.label(repo, ctx.node())
def showbranch(**args):
""":branch: String. The name of the branch on which the changeset was
committed.
......@@ -288,6 +293,7 @@
# revcache - a cache dictionary for the current revision
keywords = {
'author': showauthor,
'bisect': showbisect,
'branch': showbranch,
'branches': showbranches,
'bookmarks': showbookmarks,
......
# Here we create a simple DAG which has just enough of the required
# topology to test all the bisection status labels:
#
# 13--14
# /
# 0--1--2--3---------9--10--11--12
# \ /
# 4--5--6--7--8
$ hg init
$ echo '0' >a
$ hg add a
$ hg ci -u test -d '0 0' -m '0'
$ echo '1' >a
$ hg ci -u test -d '0 1' -m '1'
branch 2-3
$ echo '2' >b
$ hg add b
$ hg ci -u test -d '0 2' -m '2'
$ echo '3' >b
$ hg ci -u test -d '0 3' -m '3'
branch 4-8
$ hg up -r 1
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ echo '4' >c
$ hg add c
$ hg ci -u test -d '0 4' -m '4'
created new head
$ echo '5' >c
$ hg ci -u test -d '0 5' -m '5'
$ echo '6' >c
$ hg ci -u test -d '0 6' -m '6'
$ echo '7' >c
$ hg ci -u test -d '0 7' -m '7'
$ echo '8' >c
$ hg ci -u test -d '0 8' -m '8'
merge
$ hg merge -r 3
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ hg ci -u test -d '0 9' -m '9=8+3'
$ echo '10' >a
$ hg ci -u test -d '0 10' -m '10'
$ echo '11' >a
$ hg ci -u test -d '0 11' -m '11'
$ echo '12' >a
$ hg ci -u test -d '0 12' -m '12'
unrelated branch
$ hg up -r 3
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ echo '13' >d
$ hg add d
$ hg ci -u test -d '0 13' -m '13'
created new head
$ echo '14' >d
$ hg ci -u test -d '0 14' -m '14'
mark changesets
$ hg bisect --reset
$ hg bisect --good 4
$ hg bisect --good 6
$ hg bisect --bad 12
Testing changeset 9:8bcbdb072033 (6 changesets remaining, ~2 tests)
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ hg bisect --bad 10
Testing changeset 8:3cd112f87d77 (4 changesets remaining, ~2 tests)
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ hg bisect --skip 7
Testing changeset 8:3cd112f87d77 (4 changesets remaining, ~2 tests)
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
test template
$ hg log --template '{rev}:{node|short} {bisect}\n'
14:cecd84203acc
13:86f7c8cdb6df
12:a76089b5f47c bad
11:5c3eb122d29c bad (implicit)
10:b097cef2be03 bad
9:8bcbdb072033 untested
8:3cd112f87d77 untested
7:577e237a73bd skipped
6:e597fa2707c5 good
5:b9cea37a76bc good (implicit)
4:da6b357259d7 good
3:e7f031aee8ca ignored
2:b1ad1b6bcc5c ignored
1:37f42ae8b45e good (implicit)
0:b4e73ffab476 good (implicit)
$ hg log --template '{bisect|shortbisect} {rev}:{node|short}\n'
14:cecd84203acc
13:86f7c8cdb6df
B 12:a76089b5f47c
B 11:5c3eb122d29c
B 10:b097cef2be03
U 9:8bcbdb072033
U 8:3cd112f87d77
S 7:577e237a73bd
G 6:e597fa2707c5
G 5:b9cea37a76bc
G 4:da6b357259d7
I 3:e7f031aee8ca
I 2:b1ad1b6bcc5c
G 1:37f42ae8b45e
G 0:b4e73ffab476
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment