ReviewBoard ShipItColumn++

A reviewboard egy egyszerű, de használható eszköz (ha az ember készít hozzá egy jó review allocator programot, de erről majd máskor). A használat során arra törekedtünk, hogy egy commitot több ember is megnézzen, ezt viszont a reviewboard valamiért nem annyira támogatja.

Mint a mellékelt képen is látszik, a reviewboard a ship-it-et egy zöld pipával jelöli. Ha valaki azt mondja a review-re, hogy Ship it, akkor a pipa megjelenik. Ellenben ha több reviewer van egy ticketen, ez nem a legszerencsésebb dolog.

Nekünk az elvárt működés valami ilyesmi lett volna:

snap134

Ehhez az alábbi módosításra van szükség:

Első lépésben meg kell keresni menni a reviewboard egg csomagját, ahol a forrás fájlok is (.py) találhatóak. Ez operációs rendszer, python verzió függő, de az alábbi helyen érdemes keresni:

/usr/local/lib/python2.7/dist-packages/ReviewBoard-2.0.18-py2.7.egg

Az oszlopok definíciója a reviewboard\datagrids\columns.py fájlban van. A ShipIt column-ot előállító kódot meglepő módon ShipItColumn-nak hívják. A kapcsolódó forráskód így néz ki:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class ShipItColumn(Column):
    """Shows the "Ship It" count for a review request."""
    def __init__(self, *args, **kwargs):
        super(ShipItColumn, self).__init__(
            image_class='rb-icon rb-icon-shipit',
            image_alt=_('Ship It!'),
            detailed_label = _('Ship It!'),
            db_field='shipit_count',
            sortable=True,
            shrink=True,
            *args, **kwargs)
 
    def render_data(self, state, review_request):
        if review_request.issue_open_count > 0:
            return ('<span class="issue-count">'
                    ' <span class="issue-icon">!</span> %s'
                    '</span>'
                    % review_request.issue_open_count)
        elif review_request.shipit_count > 0:
            return '<span class="shipit-count">' \
                   '
 
 
<div class="rb-icon rb-icon-shipit-checkmark"' \                    '      title="%s"></div>
 
 
 
 %s' \
                   '</span>' % \
                (self.image_alt, review_request.shipit_count)
        else:
            return ''

 

A minket érdeklő rész, leginkább az if második fele: review_request.shipit_count > 0:

Itt kezelik azt a részt, ha a ticketen 0-nál több ship it van… Ezt jobb lenne korrektül kezelni, az alábbi módon:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        elif review_request.shipit_count > 0:
            peoplecount=review_request.target_people.count()
            shipicount=review_request.shipit_count
            additionalclasstext=''
            if shipicount>=peoplecount:
                additionalclasstext=' rb-icon-shipit-checkmark'
            return '<span class="shipit-count">' \
                   '
 
<div class="rb-icon %s"' \                    '      title="%s"></div>
 
 
 %s/%d' \
                   '</span>' % \
                (additionalclasstext, self.image_alt, shipicount, peoplecount)

A fájl szerkesztésénél figyelni kell a szóközökre, ugyanis a python fájlok nagyon nem szeretik a tab-okat, és a szóközök nem csak a formázásra szolgálnak…

A módosítások után, amennyiben van lefordított columns.py fájl (columns.pyc), akkor azt töröljük. Ha valaki szeretné, lefordíthatja újra az alábbi script-el:

1
2
3
#!/usr/bin/env python
import py_compile
py_compile.compile("columns.py")