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:

 

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:

        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:

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

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.