Author Archives: Steven MacLeod

Meeting Minutes for Group B – February 2nd, 2013

Status Updates:


  • Full status report at
  • Mainly been researching and understanding Review Board.
  • Has started laying the groundwork for the depends feature.


  • Did not work on Review Board because he was sick and didn’t understand how to move forward.


  • Read jQuery documentation and practised building a web service using jQuery.

Q / A:

Q: What’s the best way to test?

A: So unit testing is very valuable, but an important concept of unit tests is that you’re testing small pieces and not necessarily a full-on workflow. So a good test is something that calls into a function and gets a result and checks it, or sets up some data, runs through a couple functions, and compares those results.

[Specific to John’s project: You might have a unit test that creates two review requests, sets one as the dependency of another, saves, and verifies. One that sets a dependency to be an invalid ID, or an ID for something that’s discarded, and checks if there’s an error. Things like that.]

Trophy Feature:

  1. Adding the database code to store trophies.
  2. Adding the code to compute whether there should be a trophy for a review request, and adding that information to the database.
  3. Showing the list of trophies on the user’s page.
  4. Importing trophies from older review requests (since we never stored them before).
  • #1 should be done early and Hiroki will take this as his first task and then move on to #2
  • Yuri will start on task #3

Automating Database Change for Development on Multiple Versions

When developing on both master and the 1.6.x branch, you will need a separate database for each version. By editing ‘’ we can automatically choose the correct database based on the version currently running.

Here is an example from the top of my ‘’ which switches to ‘db/rb-1.6.x.db’ when working on 1.6, and uses the ‘db/rb.db’ file otherwise:

from reviewboard import VERSION
if VERSION[0] == 1 and VERSION[1] == 6:
    db_name = 'db/rb-1.6.x.db'
    db_name = 'db/rb.db'

# Database backend.  Any supported django database engine should work.
    'default': {
        # 'django.db.backends.' followed by one of
        # 'postgresql', 'mysql', 'sqlite3' or 'ado_mssql'.
        'ENGINE': 'django.db.backends.sqlite3',

        # The name of the database. If sqlite3, this should be an absolute
        # path.
        'NAME': db_name,

        # Not used with sqlite3
        'USER': '',

        # Not used with sqlite3
        'PASSWORD': '',

        # Set to an empty string for localhost.
        'HOST': '',

        # Set to an empty string for default
        'PORT': '',

Meeting Minutes for August 12, 2012


  • A few tests are failing. This is caused by feed history being generated for anonymous users, and will be fixed.
  • Will wrap up the features, and try to start some documentation if there is time.


  • Query arguments will be injected into the requests as keyword arguments.
  • RB will be switched to page numbers, and page sizes for the API (instead of the current start index, and max_results)
  • Resource specific base classes giving full API functionality will be created first, leaving extra helper methods for later.

Meeting Minutes for July 29, 2012


  • Reminder that firm pencils down date is August 20th.


  • Concerned with list resources changing while trying to iterate over them.
  • Depending on sorting method, re-ordering, and insertion and deletion could happen (repeats, skipped items etc.)
  • Will switch to returning in blocks, and using get_next() and get_prev() to move through items.


  • No questions or issues, but may have some during the week.
  • Christian gave a pretty comprehensive review for r/3151

Status Reports – July 29, 2012



  • Started working on the ‘load more actions’ functionality
  • Started implementing the expandable box for replies
  • Still have one bug related to the ReviewDraft to fix

Next Steps:

  • Fix the dashboard entries box
  • Figure out the cleanup procedure for actions


  • Waiting for feedback on r/3151



  • Synchronous API getting close.

Next Steps:

  • Implement special resource specific base classes (filediff etc.).
  • Finish work on synchronous transport.
  • Switch back to working on asynchronous transport.


  • When iterating over a resource list (using ‘start’ and ‘max-results’) what happens if new items are added.

Meeting Minutes for July 15, 2012


  • will have the API assume the resource data is returned in a key which is not in { ‘stat’,  ‘total_results’ }. If there is more than one key, the standard resource will except, but a resource specific base class could handle it.
  • will keep in mind allowing API plugins to provide extra resource specific base classes.
  • will stop parsing mimetypes, and treat the entire mimetype as the resource base class identifier (The +json, +xml can be stripped though).
  • Mike will take a look at r/3172 tonight.


  • has made the exapandle boxes work for changedesc, but is unhappy with the implementation.
  • The implementation will be changed to construct new html in javascript, rather than building from html that’s already there.
  • was worried about translation in javascript. This needs to be figured out more generally, and Bogdana will not worry about the translation right now.
  • The current implementation of the Actions web API resource supplies actions for all users, instead of per-user, which is a security risk. This will be changed to make the resource a child of the user resource.