{ "metadata": { "name": "" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# How Long Does It Take To Review an IPython Pull Request?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "by [Tavish Armstrong](http://tavisharmstrong.com)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Fernando Perez [wrote](https://twitter.com/fperez_org/status/383739057651466240):\n", "\n", "> IPython: 8 minutes from bug on my box to reviewed/merged PR. We're doing something right... https://github.com/ipython/ipython/pull/4294\n", "\n", "This got me thinking: how long does it usually take to do a review on the IPython project?" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import pandas as pd\n", "import json\n", "import itertools\n", "import collections\n", "import re\n", "import arrow\n", "rcParams['figure.figsize'] = (15, 3)\n", "pd.set_option('display.mpl_style', 'default')" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "markdown", "metadata": {}, "source": [ "I recently released a python package called [git2json](https://github.com/tarmstrong/git2json) for parsing git logs. It isn't well written, but it does what it says on the tin." ] }, { "cell_type": "code", "collapsed": false, "input": [ "!git2json --git-dir=/home/tavish/code/ipython/.git > ipython-log.json" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 2 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can parse the resulting JSON file and take a peek at the data structure." ] }, { "cell_type": "code", "collapsed": false, "input": [ "log = json.load(open('ipython-log.json'))\n", "print log[0]\n" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "{u'committer': {u'date': 1380325308, u'timezone': u'-0700', u'name': u'Fernando Perez', u'email': u'fernando.perez@berkeley.edu'}, u'author': {u'date': 1380325308, u'timezone': u'-0700', u'name': u'Fernando Perez', u'email': u'fernando.perez@berkeley.edu'}, u'tree': u'ea7fbb2694175423d776f649104ba42520db7cea', u'parents': [u'795c9e30ee8ad2e1a4e780c439fc50b565670e26', u'796a90bdeef377041c353019fdae19aaa72a76d3'], u'commit': u'b8295e9af6745b9c466d11bb31a6eef221e231c1', u'message': u\"Merge pull request #4294 from minrk/tornado-2don't require tornado 3 in `--post serve`\", u'changes': []}\n" ] } ], "prompt_number": 3 }, { "cell_type": "code", "collapsed": false, "input": [ "print \"Number of commits = \", len(log)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Number of commits = 12382\n" ] } ], "prompt_number": 4 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Before we answer the question posed at the beginning of this article, I'll answer some easier questions. First off: which files in IPython have been committed to the most? This is a simplified version of \"code churn\" which is [reasonably](https://research.microsoft.com/apps/pubs/default.aspx?id=69126) [effective](http://google-engtools.blogspot.ca/2011/12/bug-prediction-at-google.html) for predicting bugs. (More complicated models include lines modified or [take semantic differences into account](http://dl.acm.org/citation.cfm?id=1985456)). Since this is Friday night and I'm not trying to get a paper into ICSE, I'll just take the number of commits for each `.py` file." ] }, { "cell_type": "code", "collapsed": false, "input": [ "file_changes = lambda: itertools.chain.from_iterable(\n", " [change[2] for change in commit['changes'] if re.match(r'^.*\\.py$', change[2])]\n", " for commit in log\n", ")" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 5 }, { "cell_type": "code", "collapsed": false, "input": [ "rcParams['figure.figsize'] = (15, 6)\n", "fchanges = file_changes()\n", "fchange_count = collections.Counter(fchanges)\n", "a = average(fchange_count.values())\n", "most_common = fchange_count.most_common(20)\n", "df = pd.DataFrame(most_common)\n", "df.head()\n", "df.index = df[0]\n", "df = df[[1]]\n", "df.head()\n", "p = df.plot(kind='bar', legend=False)\n", "p.set_title('Most-changed Files in IPython')\n", "p.set_ylabel('Commits')\n", "# Draw a red line at the average\n", "hlines(a, 0, len(df), colors='r')\n" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 6, "text": [ "" ] }, { "output_type": "stream", "stream": "stderr", "text": [ "/usr/local/lib/python2.7/dist-packages/matplotlib/font_manager.py:1214: UserWarning: findfont: Font family ['monospace'] not found. Falling back to Bitstream Vera Sans\n", " (prop.get_family(), self.defaultFamily[fontext]))\n" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n77//vvLz89WyZctSL3/ssce0Zs0aPfzww9q0aZOWLFmiBx54QLfddpuaN2+uQ4cO6b777lNGRoa2\nbdumtWvXasmSJSWGxI8++ki7du1Sfn5+mS0jRozQJZdcouuvv15Lly7Vtm3btHTpUv3zn/8M+/tp\n37699u3bp9mzZ+vrr7/W3/72t6ChNFz33nuv9uzZo9GjR2vjxo3KyMjQk08+KenHd4NGjhypli1b\n6pprrtEHH3ygb775Rp988oleeOEFvfPOO5Kk0aNHa9++fbr77ru1ceNGLV26NHA7VSWcrilTpujN\nN9/U+vXrtW3bNr3xxhuKiYlR27Zty7zdn75LVpl3Os/1duLi4nTbbbfpkUce0SWXXKKhQ4cGXd6y\nZUtlZ2dr+/btys/PD7vt1ltv1fnnn69bbrlFa9eu1erVq/XrX/9azZs31y233FKh7wcAIgGDIABY\n5qdHfoyNjVWDBg1KXOeMSy+9VIsWLdKyZcvUrVs3/eY3v9F1112nGTNmSDq9W+eBAwc0atQodezY\nUVdddZUuuOACvfnmm4HbePnll7V69Wq1bNlSTZo0KbMtNjZWWVlZ6ty5s37961+rY8eOeuCBB3Ts\n2LFS20pzzTXX6Mknn1Rqaqq6dOmif/7zn5oyZUqJryvtds4+r1mzZlq0aJFycnLUvXt3jR07Vs8+\n+6yk00e0lE6vs8zKylLPnj2VkpKidu3aafjw4crNzQ2s5WvWrJn+/e9/69NPPw3czrRp00J+D+F8\nr6G+n3C6EhISNHXqVF1++eXq0qWL3nnnHf3rX/9SmzZtKnSfZ593rp/pF+717777bp08ebLUd68n\nTpyooqIitWvXTk2aNAm8C1zebdepU0f/+c9/VLt2bQ0cOFCDBg1SfHy8lixZopiYH1fAlPd8AYBI\n43NM/ToQAACPW7ZsmQYNGqQvvvgi6B1PVI/Fixfrpptu0vbt25WUlOR2DgBENFcHwfvuu0+xsbGB\nD4994YUXdOjQIU2bNk35+fk6//zzNXbs2MDnT6WnpysjI0NRUVFKSUkJOvoXAAA/NX36dHXt2lXN\nmjXThg0bNHbsWDVq1Eg5OTlup0WUo0ePas+ePYF3iWfPnu12EgBEPNd3DZ0wYYImT56sF154QZK0\ncOFCdenSRWlpaercuXPgiGk7duxQTk6Opk6dqtTUVM2aNYsjfQEAQvruu+80YsQItW/fXvfee6+u\n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\nwiBYw3llH+RQbGiU7Oik0RwbOmk0x4ZOGs2xoZNGc2zopNEcGzq90sggCAAAAAARhjWCrBEEAAAA\nUMOwRhAAAAAAEIRBsIbzyj7IodjQKNnRSaM5NnTSaI4NnTSaY0MnjebY0EmjOTZ0eqWRQRAAAAAA\nIgxrBFkjCAAAAKCGKW+NYEw1tgQ5ceKEJkyYoJMnT6q4uFi9evXSrbfeqkOHDmnatGnKz8/X+eef\nr7FjxyouLk6SlJ6eroyMDEVFRSklJUVdu3Z1Kx8AAAAArOXarqG1atXS008/rSlTpuill17S+vXr\ntWnTJi1cuFBdunRRWlqaOnfurIULF0qSduzYoZycHE2dOlWpqamaNWuW/H6/W/nW8Mo+yKHY0CjZ\n0UmjOTZ00miODZ00mmNDJ43m2NBJozk2dHql0dU1grVr15YkFRcXy+/3Ky4uTrm5ubriiiskSYMG\nDdKqVaskSatWrVK/fv0UExOjpKQkNW3aVHl57uzWCQAAAAA2c3UQ9Pv9euyxx/S73/1OnTp10kUX\nXaSioiI1aNBAkpSQkKCioiJJ0v79+9WoUaPA1zZq1EiFhYVl3vbZk3Z2dnbI0244831J5fdV5nT/\n/v2r9PZNnD5znld6yjrdv39/T/WUdprtzfb22ukz53mlh+3N9mZ7s73d7intNNub7V0Vp8vjiYPF\nHDlyRM8995xGjBihl19+WXPmzAlclpKSojlz5mj27Nlq06aNBgwYIEmaMWOGunfvrj59+pS4PQ4W\nAwAAACCSWfGB8nXr1lX37t319ddfKyEhQQcOHJB0+l3AhIQESVJiYqIKCgoCX1NQUKDExERXem0S\nzm8D3GZDo2RHJ43m2NBJozk2dNJojg2dNJpjQyeN5tjQ6ZXGGLfu+ODBg4qOjlZcXJxOnDihL774\nQjfffLN69uypzMxM3XjjjcrKylKvXr0kST179lRaWpquvfZaFRYWavfu3UpOTnYrv1rtOnhcew+f\nqNDX+hu30LpdP1T4vpPiaumC+rUr/PUAAAAAvMe1XUO/++47vfbaa/L7/XIcRwMHDtT1118f8uMj\nFixYoIyMDEVHR+vOO+9Ut27dSr3tmrZrqC2dAAAAALzBs58jePHFF+vFF18scX69evU0fvz4Ur9m\n2LBhGjZsWFWnAQAAAECN5ok1gohsXtlPujw2dNJojg2dNJpjQyeN5tjQSaM5NnTSaI4NnV5pZBAE\n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\n9cILL6hVq1aBy9LT05WRkaGoqCilpKSoa9eukqSvv/5ar732mk6ePKnu3bsrJSWlzNtnjSAAAACA\nSObJNYIXX3yxHn30UXXs2DHo/B07dignJ0dTp05VamqqZs2apTNz6syZMzV69Gi98sor2r17tz77\n7DM30gEAAADAeq4MghdeeKGaNWtW4vxVq1apX79+iomJUVJSkpo2baqvvvpK+/fv17Fjx5ScnCxJ\nGjhwoFatWlXd2SV4Zf/eUGg0x4ZOGs2xoZNGc2zopNEcGzppNMeGThrNsaHTK42ufnzExIkTdfvt\ntwd2DZ09e7batGmjAQMGSJJmzJihbt26KSkpSfPnz9f48eMlSRs3btSiRYs0bty4Um936dKl1fMN\nAAAAAIBHhdo1NKaq7nTSpEk6cOBAifNHjBihnj17VtXdSgr9DQMAAABApKuyQfDMu3fnIjExUQUF\nBYHTBQUFatSokRITE1VYWBh0fmJiopFOAAAAAIg0nvr4iJ49e2rFihUqLi7W3r17tXv3biUnJ6tB\ngwaKjY3VV199JcdxtHz5cvXq1cvtXAAAAACwkitrBD/99FPNmTNHBw8eVN26ddWyZUulpqZKkhYs\nWKCMjAxFR0frzjvvVLdu3ST9+PERJ06cUI8ePUJ+fAQAAAAAoGyuHiwGAAAAAFD9PLVrKAAAAACg\n6jEIAgAAAECEYRCsgX744Qe3E8o1btw4LVmyRIcOHXI7pUzfffed2wlheemll7RmzRr5/X63U8pk\nw3PSlu29ePFiT/+7kex4LOfNm6ft27e7nVEuGx5LGxpteA2S7Hg9t+E1SJKnH0NEJi/+7Bs9YcKE\nCW5H2GLcuHE6deqUmjZtqlq1armdU6bHHntMGzduVO3atdW0aVP5fD63k0ro3LmzNm3apLlz52rL\nli2qU6eOmjRp4qnWl156SR988IFOnTqlZs2a6bzzznM7qVT16tVTVlaW5s+fr/3796tx48aKj493\nOyuIDc9JW7Z3bm6u5s6dq82bNys2NtZz/24kOx7L/Px8LViwQB988IH8fr8uuOACT3ba8Fja0GjD\na5Bkx+u5Da9BkvTAAw8EPoasfv36bueUat68eWrUqJESEhLcTimTDT/72tAoefNnXw4Wcw527dql\nzMxM5eTkqHXr1ho0aJC6du3quRdAv9+vL774QhkZGdq6dav69u2rQYMGqVmzZm6nleD3+7VmzRrN\nnDlTUVFRGjx4sK6++mrVq1fP7TRJ0vfff6+MjAytXLlSycnJgW3uRYcPH9aKFSu0YMECNW7cWEOH\nDtWAAQMUE1NlHxcaNluek7Zsb7/fr88//1yZmZnaunWrLr/8cg0ePFhNmzZ1Oy3Alsdy586dyszM\nVHZ2ttq3b6+hQ4eqc+fObmcFseGx9HqjLa9BZ3j59Vyy4zXoyJEjysnJUWZmpvx+vwYPHqx+/fqp\nbt26bqcFfPjhh8rKylJxcbEGDx6s/v37e6pPsuNnXxsaz+aln30ZBCvASxuwPF9++aVeffVVHTt2\nTC1atNCtt96qdu3auZ0lSfrmm2+UmZmptWvXqlu3burXr582bdqk5cuXa8qUKW7nBZw6dUqrVq3S\nnDlzVLduXfn9fo0YMUKXXXaZ22kBP/zwg5YtW6bly5erYcOG6t+/vzZt2qTt27fLa2/6e/k5Kdmx\nvaXT/34yMjL02WefqXPnzvrqq6906aWX6vbbb3c7LcDrj6Xf71dubq4yMzNVUFCgvn37avPmzapV\nq5bGjh3rdl4Qrz+Wkh2Nkvdfg2x5PbfhNeiM9evX65VXXtHhw4fVt29fDR8+3FNDqw2/kLLhZ18b\nGr32sy+D4Dny2gYszcGDB5Wdna2srCw1aNBAQ4YM0c9+9jN9++23mjp1ql577TW3EzVu3DjVrVtX\nQ4cOVe/evYPeyp8yZYoee+wxF+tO++abb5SVlaXVq1erS5cuGjJkiFq1aqXCwkI9+eSTmj59utuJ\nkk4/Xt9//70GDBigwYMHq2HDhoHLxo0bpxdffNHFutNseE7asr0XL16srKwsxcfHa8iQIerdu7di\nYmLk9/s1ZswYvfrqq24nWvFYzps3T7m5uercubOGDh2q5OTkwGVjxoxRWlqai3U/suGxtKHRhtcg\nyY7Xcxteg6TTv5hYs2aNMjMztXfvXl1xxRWBofrvf/+7Z/6N2/ALKRt+9rWh0ZM/+zoI2+OPP+5M\nmDDBWb58uXP8+PGgyyZPnuxSVUkPPvig89Zbbzn5+fklLktPT3ehqKRdu3a5nVCu//7v/3YyMzNL\nbGvHcZzMzEwXikr3xRdfuJ1QLhuek7Zs73/84x/O3r17S71s+/bt1VxTOhsey6VLlzpHjx4t9bJD\nhw5Vc03ZbHgsbWi04TXIcex4PbfhNchxHOe+++5z/vKXvzibNm0qcdkbb7zhQlFJc+fOde6//35n\nxowZzldffRV02YMPPuhSVTAbfva1odFxvPmzL+8InoPdu3d7aleCsvj9fkVFRenIkSPy+XyKjY11\nO6mEgwcP6u2339amTZvk8/nUvn173XzzzZ5bFH/y5El9//338vl8atasmWfWZ5ztxIkTev/994Me\ny1/84heeWjBtw3NSsmN7S9LXX38d2N7t2rVTq1at3E4qweuPpeM4+uSTT7R582ZJUocOHdSrVy9P\nrinx+mMpeb/RltcgG17PJTteg44ePerZ7XzGRx99pMsvv1x16tQpcdnhw4cVFxfnQlUwG372taFR\n8ubPvgyC58CLG7A0eXl5mj59uo4ePSpJiouL0z333KPWrVu7XPajSZMmqUOHDho4cKAcx1F2drY2\nbNig8ePHu50WcGY/86SkJEnS3r179bvf/U49evRwuSzY1KlTFRsbqwEDBkiSsrOzdeTIET388MMu\nl/3IhuekLdv77bff1scff6w+ffrIcRzl5uaqT58+uvnmm91OC7DhsZw5c6b27Nmjfv36yXEcffzx\nx2rSpInuuusut9OC2PBY2tBow2uQZMfruQ2vQdLp4WDevHnasmWLJKldu3a644471KRJE5fLfmTD\nL6Rs+NnXhkbJoz/7uvROpJWeeeYZ56233nL27Nnj7N6923n77bedZ555xu2sEh5++GFnw4YNgdMb\nN250HnnkEReLSnr44YfDOs9NDz74YNDb+Lt27fLMrhpne+ihh8I6z002PCdt2d4PPvhg0K4vx48f\n91ynDY/lmDFjnFOnTgVOnzp1yhkzZoyLRaWz4bG0odGG1yDHseP13IbXIMdxnCeeeMLJyspyTp48\n6Zw8edLJyspynnjiCbezgrz++uvOpEmTnI8++shZunSp8+yzzzozZ850OyuIDT/72tDoON782ZcP\nlD8HBw4c0M0336ykpCQ1adJEw4cP14EDB9zOKiE6OlodOnQInG7fvr2io6NdLCqpS5cuys7Olt/v\nl9/vV05OjqcONS5JdevWDdrVoEmTJp47rLMktWrVKvAbT0nasmWL53bTseE5acv2TkxM1IkTJwKn\nT5w4ocTERBeLSrLhsWzatKny8/MDp/Pz8z25a5ENj6UNjTa8Bkl2vJ7b8Bokne4aOHCgYmJiFBMT\no4EDB+rkyZNuZwVZv369UlNTNXjwYA0ZMkRPPPGEvvzyS7ezgtjws68NjZI3f/Zl19BzMG/ePLVu\n3VqXX365JGnlypXKy8vTb37zG5fLgs2dO1cnTpxQv379JEk5OTmqVatWYFcTL/yncvvtt+vEiROB\n3fSYk8QAACAASURBVB8cx1Ht2rUlST6fT/PmzXMzT9LpXcfy8/PVt29fSdLHH3+sxo0bq0uXLpKk\nPn36uJkX8NBDD2nXrl1q1KiRfD6f8vPz1axZM0VFRcnn8+mll15yO9GK56Qt23vy5MnaunVroOvz\nzz9XcnJyYPunpKS4XGjHY/n0008rLy9PycnJ8vl8ysvLU+vWrQMDzLhx41wuPM2Gx9KGRhtegyQ7\nXs9teA2SpPnz56tu3bpB2/zw4cO64YYbJMkTHynwxz/+Ub/97W+DdquePXu2/vCHP7hc9iMbfva1\noVHy5s++DILnwIsbsDQTJkwIuX/5008/XY019nrttdeCHkfHcYJO33vvvW5klbB3796Ql5/5D8ZN\nNjwnbdnemZmZIS8fNGhQtXSEYsNjuX79+jIv8/l86tixYzXWlM2Gx9KGRhtegyQ7Xs9teA2SpPvu\nu6/My3w+n/785z9XY03pbPiFlA0/+9rQ6FUMggAAAEA1s+UXUqi5WCMYIb7++mu3E8r1+OOPu51Q\nrtWrV7udEJYXXnjB7YRy2fCctGV7//Of/3Q7oVy5ubluJ5Trr3/9q9sJYbHheWnD9rbhNUiy4/Xc\nhtcgSZ5bN9apU6cy/zAERga3f/ZlEKwktzdguD744AO3E8o1efJktxPKtXXrVrcTwnLPPfe4nVAu\nG56Ttmxvr6xvCsVrP3TPmzdP27dvDzrvyiuvdKnm3NjwvPTa9i6NDa9BkvT73//e7YRy2fAaJEnT\np093O6FcNvxCyoaffW1olNz/2ZddQ+Ga/fv3Ky8vTz6fT8nJyWrQoIHbSVZavHixrr766nLPA6rL\niRMnSnwAdmnnuenDDz9UVlaWiouLNXjwYPXv399zR7q0hde396lTp/Twww8rLS3N7ZSwHD9+XAUF\nBWrWrJnbKaXatGmT2rdvX+55qJitW7d67vMtUXPxjmAN9Mknn+jw4cOB04cPH9ann37qYlFJS5cu\nVWpqqj799FN98sknSk1N1UcffeR2VpAlS5bo0KFDgdOHDh3S+++/72JR6UpbuJ+RkVH9ISE888wz\nYZ3nhpUrV+qTTz7RypUrS/z55JNP3M4rYffu3XrxxRc1atQojRo1SpMnT9aePXvczgpS2ofjuvqB\nuaW48sorNWnSJN1///3at2+fHnnkEaWlpXnu0O05OTk6cuSIpNMf5D1lyhTPvdvm9e0dHR2tCy+8\nUPv27XM7pVy5ubl6/PHH9dxzz0mStm3bphdffNHlqmCzZ88O6zy3bdmyJfBvR5KOHDmir776ysWi\nsh0/fjzwdy8Ogfv379eqVauUm5vrud1rz/By4+23367f/OY3pf654447XG2LcfXeLXH77beXebQx\nLx6N6O233w46XHdcXJzeeust9e7d28WqYIsWLdLkyZMVHx8vSfrhhx/01FNPaciQIS6X/Wjp0qW6\n6qqrAqfr1aunDz/8UL/85S9drPpRdna2VqxYob179wb9oHD06NHA4+q2EydO6Pjx4zp48GDQUH3k\nyBEVFha6WPaj1atXhzyaoBcOfX+2V155RVdddZUeeeQRSacHhbS0ND3//PMul53+j3j//v06fvx4\n0LBy9OjRoB90vMLv92vnzp3auXOn6tevr0suuUTvvfeePvjgA40dO9btPEnSv/71L11++eXatGmT\nvvzyS1133XWaOXOmJ9aN2bS9Dx06pIcffljJycmqU6dO4HwvHJXxbG+99Zaef/55TZw4UZLUsmXL\nco8kWl22bNmizZs36+DBg3r33Xd1ZoeyY8eOyYs7l82cOTPo/8Y6depo5syZru+Kd7bNmzdrxowZ\nOnbsmKZPn65vvvlGH374oe666y630wKWLl2qt99+W507d5Z0eui/+eabPffzmpcb/+d//sfthDIx\nCIbByxuwNKW9IPv9fhdKyhYfHx/0n3GdOnU8M7ycceYDP6OiogKnT5065XLVj9q1a6eGDf8fe+8e\nVlWd9v+/NqByMBRFtPKAZIAoJ600ZAzSUdNMM81R1LSpp8ynKU8ZkZaWGpgog8Z4SGp8spzMnDTM\nlPIUggcE8oCoiIUIiILIcQvs3x/7t5d7CaY+0zPrXvPdr+vyutyLf94XH9ba6z69bzfKy8sZPny4\ncu5OTk506dJFY3Vmdu7cSVJSEqWlpaoXLicnJ1WQrSW/ZTEuEcuSZAv9+/dn69atGiq6QWZmJnv2\n7OHKlSuq56ajoyPjxo3TUFljPv30Uw4fPkzPnj0ZNWoU3bp1U3722muvaahMjeX5c+TIEQYMGEDv\n3r3ZuHGjxqrM6Om8x44d2+jabyWAtMLe3h4XFxfVNSk66+rqqKmpoaGhgerqauW6k5MTM2bM0FDZ\n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\ncfss2ZYAAAAASUVORK5CYII=\n", "text": [ "" ] } ], "prompt_number": 6 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Someone more familiar with IPython development will know how obvious the above graph is.\n", "\n", "Next, I'll make a simple plot showing weekly commit counts over time, similar to the plots GitHub would show you. I'll create a data frame from a list in the format `[(date_rounded_down_to_week, commit_id)]` and then `groupby()` the date." ] }, { "cell_type": "code", "collapsed": false, "input": [ "def weekly_date_resolution(ts):\n", " ar = arrow.arrow(ts)\n", " day_of_month = ar.timetuple().tm_mday\n", " week = int(day_of_month) / 7\n", " new_day = (week*7)+1\n", " assert new_day > 0\n", " assert new_day < 30\n", " try:\n", " day_adjusted = ar.replace(day=new_day)\n", " except ValueError:\n", " new_day = day_of_month # just keep the original\n", " day_adjusted = ar.replace(day=new_day)\n", " return day_adjusted.date()\n", "\n", "commit_times = lambda: (\n", " (weekly_date_resolution(commit['committer']['date']), commit['commit'])\n", " for commit in log\n", ")\n", "dfct = pd.DataFrame(list(commit_times()), columns=['date', 'id'])\n", "dfct = dfct.groupby('date').aggregate(len)\n", "dfct.head()\n" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
id
date
2005-07-01 1
2005-07-15 6
2005-08-08 2
2005-08-15 4
2005-08-22 1
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 7, "text": [ " id\n", "date \n", "2005-07-01 1\n", "2005-07-15 6\n", "2005-08-08 2\n", "2005-08-15 4\n", "2005-08-22 1" ] } ], "prompt_number": 7 }, { "cell_type": "markdown", "metadata": {}, "source": [ "A few more lines gives us a basic plot." ] }, { "cell_type": "code", "collapsed": false, "input": [ "p = dfct.plot(legend=False)\n", "p.set_title('Weekly commits on IPython')\n", "p.set_ylabel('Commits')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 8, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAA3oAAAGKCAYAAABaXjNIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xt8FPW9N/DPzGw2kBhAghElIiJ4A7k9qEUUKGj1CI+1\neBS8w7G1cuyppa1H5Zx6t6dIlVLrKbWIrY+eHmsr2ItaKwYVKBVBEaSoICio3EIMAkl2Z+b3/DE7\ns5dsdmeT2dnfzH7erxcv2c2ymeSbbfeX700RQggQERERERFRaKilvgAiIiIiIiLyFg96RERERERE\nIcODHhERERERUcjwoEdERERERBQyPOgRERERERGFDA96REREREREIcODHhERuTZjxgycf/75HX58\n+/btUFUVq1at8vGqSu+uu+7C4MGDS30ZUlq+fDlUVcWnn35a6kshIiorPOgREQXI4sWLEY1GcejQ\nobT7hw8fjmg0ioMHD7a7/7rrrvPs8yuKAkVRPHu+sLjlllvw97//3bl933334YQTTijhFeWnqiqe\neuop5/aAAQOgqipUVUX37t1x6qmnYt68eShk3e6gQYNw9913F+NyiYioQDzoEREFyHnnnQdd17F8\n+XLnvr179+Ldd9/Fsccei1dffTXt/o0bN+bMwBVKCFHQG/9yUV1djd69e5f6MgqWemhXFAW33XYb\ndu3ahc2bN2PWrFm47bbb8OCDD3bq+YiIqLR40CMiCpD+/fvjxBNPxLJly5z7GhoaMHToUFx88cXt\n7hdC4LzzzgMArF27Fl/5yldQU1ODuro6XHrppfj444/Tnv+vf/0rxo4di6qqKtTX1+Nf/uVfsH//\n/g6v56OPPsKpp56K6dOnIxaLtfv4hAkT8M1vfjPtPiEETjzxxJyZn4MHD+I73/kO+vfvj27duuGE\nE07Af/3Xfzkff++99zB58mTU1NSgpqYGF198MbZu3ep8/Fe/+hUqKiqwfPlynH766aiqqsLEiROx\na9cuNDQ0YMSIETjiiCNw/vnnp5UU2iWYzzzzDAYNGoTq6mpceumlOHjwIJ555hmcfPLJ6NGjBy67\n7DIcOHCg3b+zP/cdd9yBjz76yMmQ3XPPPQCA5557DiNHjkR1dTWOPPJInHXWWXj77bc7/D4AwI9/\n/GMMHDgQlZWVGDRoEBYsWJD28QEDBuDOO+/EzTffjNraWvTt2xe33HILTNPM+bzZHHHEEairq8Px\nxx+Pb3/725g0aRKWLl2KgwcPoqamBr/5zW/SHm+X6i5fvhwTJkzA1q1bcffdd0NVVWialvbztWnT\nJowbNw7V1dUYMmQIXnrppbTnchvTVatWYdSoUaiursaZZ56JdevWFfx1EhGVAx70iIgCZtKkSWkH\nuldeeQWTJk3CxIkT291/6qmnom/fvti0aRMmTJiAsWPHYu3atWhoaICmaTj//PPR1tbmPP6SSy7B\nlVdeiQ0bNmDp0qXYvn07pk6dmvb57azN+vXrMWbMGFxwwQX43//9X0Sj0XbXeuONN+I3v/lNWqnp\nK6+8go8++ghf//rXs359QghMmTIFf/rTn/Czn/0MmzdvxpNPPomjjz4aANDS0oKvfOUriMVieO21\n1/Dqq6/i4MGDuPDCCxGPx53nMU0T99xzDxYvXoyVK1di586duOyyy3DXXXfh0UcfxYoVK7Bz5058\n97vfTfv8n332GZ544gksXboUL7zwAl5//XVMnToVv/rVr/C73/0Ozz//PF5//XX88Ic/zHr906dP\nx6233or6+nrs2rULu3btwve//33s2rULl112Ga666ips2rQJq1evxuzZsxGJRLI+DwA88sgjuOOO\nOzBnzhxs2rQJt9xyC2677TYsXrw47XEPP/ww+vXrhzfeeAM//elP8ZOf/ARPPPFEh8/rVrdu3RCL\nxXDEEUfgqquuwi9/+cu0jz/22GM46aSTMGHCBCxZsgQDBgxwvtbPPvsM9fX1zmO///3v4z//8z+x\nfv16jB49GtOmTUNzczOAwmI6Z84cPPzww1i3bh2OPPJIXH755TAMo8tfKxFR6AgiIgqU3/72t0JV\nVbF3714hhBAnnXSS+OMf/ygaGxtFJBJx7h88eLD49re/LYQQ4rrrrhPTp09Pe57W1lZRVVUlnnvu\nOSGEEOPHjxe333572mM++ugjoSiKWL9+vfM85513nli2bJno1auX+NGPfpT2+G3btglFUcTKlSud\nz3HUUUeJRYsWOY+ZPn26mDJlSodf38svvywURRFr167N+vFFixaJqqoq0djY6Ny3e/du0b17d/HE\nE08IIYR4/PHH065bCCHmzZsnFEUR69atc+6bP3++6NOnj3P7zjvvFJFIJO25b7rpJqFpmti3b59z\n38033yxGjx6d9u8GDRrk3L733nvFgAED0q573bp1QlEUsX379g6/9kz19fXi1ltvTbtv9uzZYuDA\n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\n", "text": [ "" ] } ], "prompt_number": 8 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's get back to the original question: *how long does it usually take to do a review?*\n", "\n", "I'll make a distinction between two different kinds of commits:\n", "\n", "* **Merge commits**: The commit that merged the pull request branch into the main branch.\n", "* **PR commits**: The `HEAD` (or most recent) commit on the pull request's source branch." ] }, { "cell_type": "code", "collapsed": false, "input": [ "def is_pull_request_merge(message):\n", " '''Match commit messages that start with \"Merge pull request #\"'''\n", " return re.match(r'^Merge pull request #', message)\n", "\n", "\n", "def pull_request_number(message):\n", " '''Extract the PR # from the commit message.'''\n", " return int(re.match(r'^Merge pull request #(\\d+)', message).groups()[0])\n", "\n", "\n", "# Create a table for the merge commits.\n", "merge_commits = [\n", " [\n", " commit['parents'][1], # the second parent seems to be the source branch\n", " commit['committer']['date'],\n", " pull_request_number(commit['message']),\n", " ]\n", " for commit in log if is_pull_request_merge(commit['message'])\n", "]\n", "# Also create a set of merge commits for use in the next cell.\n", "merge_commit_parent_ids = [mc[0] for mc in merge_commits]\n", "merge_df = pd.DataFrame(\n", " merge_commits,\n", " columns=['merge_commit', 'merge_timestamp', 'pr'],\n", " index=merge_commit_parent_ids,\n", ")\n", "merge_df.head()" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
merge_commitmerge_timestamppr
796a90bdeef377041c353019fdae19aaa72a76d3 796a90bdeef377041c353019fdae19aaa72a76d3 1380325308 4294
b0d6287174b62de9b89190b868317d12b5bc4ae4 b0d6287174b62de9b89190b868317d12b5bc4ae4 1380323422 4270
07b4962bd787068896f0e2b5dfb977441c7b391a 07b4962bd787068896f0e2b5dfb977441c7b391a 1380301596 4278
e51d4d021c57c846ff1ad439d20b3fcc6b1ebc77 e51d4d021c57c846ff1ad439d20b3fcc6b1ebc77 1380271407 4282
68b0f9d2d5f29c540f7873141cb09026c492d0ef 68b0f9d2d5f29c540f7873141cb09026c492d0ef 1380215023 4279
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 9, "text": [ " merge_commit \\\n", "796a90bdeef377041c353019fdae19aaa72a76d3 796a90bdeef377041c353019fdae19aaa72a76d3 \n", "b0d6287174b62de9b89190b868317d12b5bc4ae4 b0d6287174b62de9b89190b868317d12b5bc4ae4 \n", "07b4962bd787068896f0e2b5dfb977441c7b391a 07b4962bd787068896f0e2b5dfb977441c7b391a \n", "e51d4d021c57c846ff1ad439d20b3fcc6b1ebc77 e51d4d021c57c846ff1ad439d20b3fcc6b1ebc77 \n", "68b0f9d2d5f29c540f7873141cb09026c492d0ef 68b0f9d2d5f29c540f7873141cb09026c492d0ef \n", "\n", " merge_timestamp pr \n", "796a90bdeef377041c353019fdae19aaa72a76d3 1380325308 4294 \n", "b0d6287174b62de9b89190b868317d12b5bc4ae4 1380323422 4270 \n", "07b4962bd787068896f0e2b5dfb977441c7b391a 1380301596 4278 \n", "e51d4d021c57c846ff1ad439d20b3fcc6b1ebc77 1380271407 4282 \n", "68b0f9d2d5f29c540f7873141cb09026c492d0ef 1380215023 4279 " ] } ], "prompt_number": 9 }, { "cell_type": "code", "collapsed": false, "input": [ "# Create a table for pull request commits.\n", "pr_commits = [\n", " [\n", " commit['commit'],\n", " commit['committer']['date'],\n", " len(commit['changes']), # let's sneak in another basic churn metric\n", " ]\n", " for commit in log\n", " # Do we have a merge commit for this commit?\n", " if commit['commit'] in merge_commit_parent_ids\n", "]\n", "commit_ids = [prc[0] for prc in pr_commits]\n", "pr_df = pd.DataFrame(pr_commits, columns=['commit', 'commit_timestamp', 'churn'], index=commit_ids)\n", "pr_df.head()" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
commitcommit_timestampchurn
796a90bdeef377041c353019fdae19aaa72a76d3 796a90bdeef377041c353019fdae19aaa72a76d3 1380325245 1
e51d4d021c57c846ff1ad439d20b3fcc6b1ebc77 e51d4d021c57c846ff1ad439d20b3fcc6b1ebc77 1380162595 1
68b0f9d2d5f29c540f7873141cb09026c492d0ef 68b0f9d2d5f29c540f7873141cb09026c492d0ef 1380158115 3
07b4962bd787068896f0e2b5dfb977441c7b391a 07b4962bd787068896f0e2b5dfb977441c7b391a 1380153904 1
d4d6bc63d6c6dd34c5fe1270a90caec2e0208bfa d4d6bc63d6c6dd34c5fe1270a90caec2e0208bfa 1380099263 1
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 10, "text": [ " commit \\\n", "796a90bdeef377041c353019fdae19aaa72a76d3 796a90bdeef377041c353019fdae19aaa72a76d3 \n", "e51d4d021c57c846ff1ad439d20b3fcc6b1ebc77 e51d4d021c57c846ff1ad439d20b3fcc6b1ebc77 \n", "68b0f9d2d5f29c540f7873141cb09026c492d0ef 68b0f9d2d5f29c540f7873141cb09026c492d0ef \n", "07b4962bd787068896f0e2b5dfb977441c7b391a 07b4962bd787068896f0e2b5dfb977441c7b391a \n", "d4d6bc63d6c6dd34c5fe1270a90caec2e0208bfa d4d6bc63d6c6dd34c5fe1270a90caec2e0208bfa \n", "\n", " commit_timestamp churn \n", "796a90bdeef377041c353019fdae19aaa72a76d3 1380325245 1 \n", "e51d4d021c57c846ff1ad439d20b3fcc6b1ebc77 1380162595 1 \n", "68b0f9d2d5f29c540f7873141cb09026c492d0ef 1380158115 3 \n", "07b4962bd787068896f0e2b5dfb977441c7b391a 1380153904 1 \n", "d4d6bc63d6c6dd34c5fe1270a90caec2e0208bfa 1380099263 1 " ] } ], "prompt_number": 10 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now that we have these two data frames, we can merge them together." ] }, { "cell_type": "code", "collapsed": false, "input": [ "both_df = pr_df.join(merge_df)\n", "both_df.head()" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
commitcommit_timestampchurnmerge_commitmerge_timestamppr
796a90bdeef377041c353019fdae19aaa72a76d3 796a90bdeef377041c353019fdae19aaa72a76d3 1380325245 1 796a90bdeef377041c353019fdae19aaa72a76d3 1380325308 4294
e51d4d021c57c846ff1ad439d20b3fcc6b1ebc77 e51d4d021c57c846ff1ad439d20b3fcc6b1ebc77 1380162595 1 e51d4d021c57c846ff1ad439d20b3fcc6b1ebc77 1380271407 4282
68b0f9d2d5f29c540f7873141cb09026c492d0ef 68b0f9d2d5f29c540f7873141cb09026c492d0ef 1380158115 3 68b0f9d2d5f29c540f7873141cb09026c492d0ef 1380215023 4279
07b4962bd787068896f0e2b5dfb977441c7b391a 07b4962bd787068896f0e2b5dfb977441c7b391a 1380153904 1 07b4962bd787068896f0e2b5dfb977441c7b391a 1380301596 4278
d4d6bc63d6c6dd34c5fe1270a90caec2e0208bfa d4d6bc63d6c6dd34c5fe1270a90caec2e0208bfa 1380099263 1 d4d6bc63d6c6dd34c5fe1270a90caec2e0208bfa 1380149814 4131
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 11, "text": [ " commit \\\n", "796a90bdeef377041c353019fdae19aaa72a76d3 796a90bdeef377041c353019fdae19aaa72a76d3 \n", "e51d4d021c57c846ff1ad439d20b3fcc6b1ebc77 e51d4d021c57c846ff1ad439d20b3fcc6b1ebc77 \n", "68b0f9d2d5f29c540f7873141cb09026c492d0ef 68b0f9d2d5f29c540f7873141cb09026c492d0ef \n", "07b4962bd787068896f0e2b5dfb977441c7b391a 07b4962bd787068896f0e2b5dfb977441c7b391a \n", "d4d6bc63d6c6dd34c5fe1270a90caec2e0208bfa d4d6bc63d6c6dd34c5fe1270a90caec2e0208bfa \n", "\n", " commit_timestamp churn \\\n", "796a90bdeef377041c353019fdae19aaa72a76d3 1380325245 1 \n", "e51d4d021c57c846ff1ad439d20b3fcc6b1ebc77 1380162595 1 \n", "68b0f9d2d5f29c540f7873141cb09026c492d0ef 1380158115 3 \n", "07b4962bd787068896f0e2b5dfb977441c7b391a 1380153904 1 \n", "d4d6bc63d6c6dd34c5fe1270a90caec2e0208bfa 1380099263 1 \n", "\n", " merge_commit \\\n", "796a90bdeef377041c353019fdae19aaa72a76d3 796a90bdeef377041c353019fdae19aaa72a76d3 \n", "e51d4d021c57c846ff1ad439d20b3fcc6b1ebc77 e51d4d021c57c846ff1ad439d20b3fcc6b1ebc77 \n", "68b0f9d2d5f29c540f7873141cb09026c492d0ef 68b0f9d2d5f29c540f7873141cb09026c492d0ef \n", "07b4962bd787068896f0e2b5dfb977441c7b391a 07b4962bd787068896f0e2b5dfb977441c7b391a \n", "d4d6bc63d6c6dd34c5fe1270a90caec2e0208bfa d4d6bc63d6c6dd34c5fe1270a90caec2e0208bfa \n", "\n", " merge_timestamp pr \n", "796a90bdeef377041c353019fdae19aaa72a76d3 1380325308 4294 \n", "e51d4d021c57c846ff1ad439d20b3fcc6b1ebc77 1380271407 4282 \n", "68b0f9d2d5f29c540f7873141cb09026c492d0ef 1380215023 4279 \n", "07b4962bd787068896f0e2b5dfb977441c7b391a 1380301596 4278 \n", "d4d6bc63d6c6dd34c5fe1270a90caec2e0208bfa 1380149814 4131 " ] } ], "prompt_number": 11 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can take the *delta* by subtracting the merge timestamp from the commit timestamp. This is the difference between the commit-under-review's timestamp and the merge timestamp, in seconds. We can do some basic math to get the difference on other scales. The HTML version of the table shows the results." ] }, { "cell_type": "code", "collapsed": false, "input": [ "rcParams['figure.figsize'] = (5, 10)\n", "both_df['delta'] = both_df['merge_timestamp'] - both_df['commit_timestamp']\n", "delta = both_df['delta']\n", "both_df['delta_weeks'] = delta/60.0/60.0/24.0/7.0\n", "both_df['delta_days'] = delta/60.0/60.0/24.0\n", "both_df['delta_hours'] = delta/60.0/60.0\n", "both_df['delta_mins'] = delta/60.0\n", "both_df['delta_secs'] = delta\n", "both_df.head()" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
commitcommit_timestampchurnmerge_commitmerge_timestampprdeltadelta_weeksdelta_daysdelta_hoursdelta_minsdelta_secs
796a90bdeef377041c353019fdae19aaa72a76d3 796a90bdeef377041c353019fdae19aaa72a76d3 1380325245 1 796a90bdeef377041c353019fdae19aaa72a76d3 1380325308 4294 63 0.000104 0.000729 0.017500 1.050000 63
e51d4d021c57c846ff1ad439d20b3fcc6b1ebc77 e51d4d021c57c846ff1ad439d20b3fcc6b1ebc77 1380162595 1 e51d4d021c57c846ff1ad439d20b3fcc6b1ebc77 1380271407 4282 108812 0.179914 1.259398 30.225556 1813.533333 108812
68b0f9d2d5f29c540f7873141cb09026c492d0ef 68b0f9d2d5f29c540f7873141cb09026c492d0ef 1380158115 3 68b0f9d2d5f29c540f7873141cb09026c492d0ef 1380215023 4279 56908 0.094094 0.658657 15.807778 948.466667 56908
07b4962bd787068896f0e2b5dfb977441c7b391a 07b4962bd787068896f0e2b5dfb977441c7b391a 1380153904 1 07b4962bd787068896f0e2b5dfb977441c7b391a 1380301596 4278 147692 0.244200 1.709398 41.025556 2461.533333 147692
d4d6bc63d6c6dd34c5fe1270a90caec2e0208bfa d4d6bc63d6c6dd34c5fe1270a90caec2e0208bfa 1380099263 1 d4d6bc63d6c6dd34c5fe1270a90caec2e0208bfa 1380149814 4131 50551 0.083583 0.585081 14.041944 842.516667 50551
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 12, "text": [ " commit \\\n", "796a90bdeef377041c353019fdae19aaa72a76d3 796a90bdeef377041c353019fdae19aaa72a76d3 \n", "e51d4d021c57c846ff1ad439d20b3fcc6b1ebc77 e51d4d021c57c846ff1ad439d20b3fcc6b1ebc77 \n", "68b0f9d2d5f29c540f7873141cb09026c492d0ef 68b0f9d2d5f29c540f7873141cb09026c492d0ef \n", "07b4962bd787068896f0e2b5dfb977441c7b391a 07b4962bd787068896f0e2b5dfb977441c7b391a \n", "d4d6bc63d6c6dd34c5fe1270a90caec2e0208bfa d4d6bc63d6c6dd34c5fe1270a90caec2e0208bfa \n", "\n", " commit_timestamp churn \\\n", "796a90bdeef377041c353019fdae19aaa72a76d3 1380325245 1 \n", "e51d4d021c57c846ff1ad439d20b3fcc6b1ebc77 1380162595 1 \n", "68b0f9d2d5f29c540f7873141cb09026c492d0ef 1380158115 3 \n", "07b4962bd787068896f0e2b5dfb977441c7b391a 1380153904 1 \n", "d4d6bc63d6c6dd34c5fe1270a90caec2e0208bfa 1380099263 1 \n", "\n", " merge_commit \\\n", "796a90bdeef377041c353019fdae19aaa72a76d3 796a90bdeef377041c353019fdae19aaa72a76d3 \n", "e51d4d021c57c846ff1ad439d20b3fcc6b1ebc77 e51d4d021c57c846ff1ad439d20b3fcc6b1ebc77 \n", "68b0f9d2d5f29c540f7873141cb09026c492d0ef 68b0f9d2d5f29c540f7873141cb09026c492d0ef \n", "07b4962bd787068896f0e2b5dfb977441c7b391a 07b4962bd787068896f0e2b5dfb977441c7b391a \n", "d4d6bc63d6c6dd34c5fe1270a90caec2e0208bfa d4d6bc63d6c6dd34c5fe1270a90caec2e0208bfa \n", "\n", " merge_timestamp pr delta \\\n", "796a90bdeef377041c353019fdae19aaa72a76d3 1380325308 4294 63 \n", "e51d4d021c57c846ff1ad439d20b3fcc6b1ebc77 1380271407 4282 108812 \n", "68b0f9d2d5f29c540f7873141cb09026c492d0ef 1380215023 4279 56908 \n", "07b4962bd787068896f0e2b5dfb977441c7b391a 1380301596 4278 147692 \n", "d4d6bc63d6c6dd34c5fe1270a90caec2e0208bfa 1380149814 4131 50551 \n", "\n", " delta_weeks delta_days \\\n", "796a90bdeef377041c353019fdae19aaa72a76d3 0.000104 0.000729 \n", "e51d4d021c57c846ff1ad439d20b3fcc6b1ebc77 0.179914 1.259398 \n", "68b0f9d2d5f29c540f7873141cb09026c492d0ef 0.094094 0.658657 \n", "07b4962bd787068896f0e2b5dfb977441c7b391a 0.244200 1.709398 \n", "d4d6bc63d6c6dd34c5fe1270a90caec2e0208bfa 0.083583 0.585081 \n", "\n", " delta_hours delta_mins delta_secs \n", "796a90bdeef377041c353019fdae19aaa72a76d3 0.017500 1.050000 63 \n", "e51d4d021c57c846ff1ad439d20b3fcc6b1ebc77 30.225556 1813.533333 108812 \n", "68b0f9d2d5f29c540f7873141cb09026c492d0ef 15.807778 948.466667 56908 \n", "07b4962bd787068896f0e2b5dfb977441c7b391a 41.025556 2461.533333 147692 \n", "d4d6bc63d6c6dd34c5fe1270a90caec2e0208bfa 14.041944 842.516667 50551 " ] } ], "prompt_number": 12 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The first thing that stands out is (as of this writing) commit `796a90bdeef3770` has a delta of one minute. Fernando reported 8 minutes, which is much more plausible. This makes me wonder if some people have out-of-date clocks. **Update: Fernando says that the review time was 1 minute; 8 minutes was from bug to pull request to commit.**\n", "\n", "Anyways, let's make a box plot. Box plots are fun." ] }, { "cell_type": "code", "collapsed": false, "input": [ "rcParams['figure.figsize'] = (15, 3)\n", "both_df[['delta_days']].boxplot(vert=False)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 13, "text": [ "{'boxes': [],\n", " 'caps': [,\n", " ],\n", " 'fliers': [,\n", " ],\n", " 'medians': [],\n", " 'whiskers': [,\n", " ]}" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n4lNJ0iefDFdVlU9lZX7deWeiamqaj/Wdd+olKbS9d96pV01NnCorm4+z+fkSVFERo/T0JiUllWrU\nqLNtvn6+eq2NV3GxXxUVFVq7dnjo+Np7fFGRX2vXntDp03304Ye3qqjIr+LiOO3e/bmysr6mM2d8\n+t//vSBJKiuL05QpiaqqqtLYsaf06qt3RNyfvLxNungxS+np6crPT7iqX6T9378/TdXV3wr9eVdU\nVCg9PV3Z2UFJ26+4f0v/SM8vSWvXnrj8cbiKivyqqqpSWdlXr6HWPQKBg9q6dZDq6m4PvR43barR\nqFG3aOTIRpWVHQ89nyRVVFRo5MizGjVq1A337uifn6Rr9ml5/O7de/Thh9+JuD8tf96RjmfWrHuu\nub+tH389fa/3+Dtz+UZeP929P4FAQKNGjer083Xk73NPutz6+FvO2ikujrvG54eApPE3zevB6vVr\n9frpqtd/9+1f2/9+tPXvk5cu3+z9e/plL/fv7P8PbobLXcHnOI7T1o2bN2/WhQsXNG3aNEnS22+/\nrT59+uiDDz7Q8uXLr7r/unXrlJCQoB/84Af6zW9+E3pHtr6+XnPmzFF+fr5SU1O1bt06SdLUqVOv\neo6amhrl5eVp6dKlkqRjx45pyZIlWrRokdatW6e6ujrl5uaqqalJTz75pNauXStJ2rhxo2JjY/Wv\nf/1Ls2fP1h13NP+nvbKyUnv37tX777+v5557TiNHjrxqm1u3btWYMWP0/oAH9eipne0Gm7iyVFtm\nfqvd+7QnNdUnKVmSFB8vZWYGI55aPGpU41WnFu/Z41f//k2qrIzRyZNfaPToJE2fXq+WU4vDTyMt\nKvJrzx6/MjODkqSWUw4WLqzVlCmJoct//WsvVVX5dPRolaZMSVRFRYw+/rhakjRlSqIKCy8oP7+3\n/vrXXkpPbwo9ruU/KYWFzYum/PzeoeebPr3+imNeuLA2dHv49hcurL38XEUqLv5e6H7hH8OfO/z5\nWoTfL9Ll1lpubzm2SMKPu73thd9+re1eS0ceH6lVuPaOMVxRUVHok0pn9qOz923d9nqeM9Kf0Y1u\nqyt0Zlvhr/+ObuNG97Grj78zrPcl/PXfVayPydqNvNZa9/dau+7YXzcbdMfrv7t47bVxPbzUvyfq\nKf29+nejpKREEyZM6NRztPvNnu655x7t3r1b9fX1unTpkvbu3av4+Hj1799fu3btktQ8E3vs2LHQ\nY1rWxb1799alS82zlg0NDZKkxMRE1dbWateuXaFvCtVa37591bdvX33yySeSwr9aKV28eFEpKSmS\npB07dqipqSl02/jx47V582ZJumIR279/f02aNEmZmZmhr+Th5tITPol4Gf1t0d8W/W3R3xb9bdHf\nFv29z9/ejYMHD9a3v/1t5eXlKTk5WUOGDJHP59O8efO0cuVK/e1vf1NjY6Oys7N11113SfrquxaP\nHz9eK1asCH2zp+9973uaP3++UlJSNGTIkHZ3atasWQoEAvL5fBo9enToOb///e9r0aJF2rFjh+67\n7z717v3VO3XJyckaNGiQHnjggdB1O3fu1EcffaTY2Fjdeuut+tGPftSxSl1qmxIT/5/69JEGD27S\n5MkNSk52dPZsy2m9zV8IyM4Oqrw8RidPxuj225uUkdGkYFCXT51sPo134sQGZWcHlZTkKDnZuXxa\nU7OkJEfBoDR5cvMXEcK/EdTkyQ2hy2fO+HTyZEzo+vLymCvu17IvZ874lJHRFHpcUtKVb+S3bPvM\nGd8V+9H69tbbb31764+tf9/e817rvuG3txxbJOHH3d72rncfr0dHHh+pVbj2jrE79qOz9+1Izxt5\nbVzvbR3R2W111X2u9/FdffydcTPtS1fpicd0IzrzWvNau+7YX681cAtdgMii+e9Gu6cWe0ldXZ0W\nLFigP/7xj0pIuHpWtD3unlqcqnPnznX48T1RTzm1w6vob4v+tuhvi/626G+L/rbob6srTi1u9x1Z\nr/j3v/+t5cuX67HHHrvhRSwAAAAAwFtM35FdtWqVPv300yuumzx5ssaPH+/qfvCOLAAAAAC4w/Pv\nyM6YMcNy8yZYxAIAAABA57T7XYsBN4R/Z2q4j/626G+L/rbob4v+tuhvi/7ex0IWAAAAAOApLGRh\nju8YZ4v+tuhvi/626G+L/rbob4v+3sdCFgAAAADgKSxkL5u4sjT0sb1ft8THGu9pz8OMgi3626K/\nLfrbor8t+tuivy36e1+P+DmyXWHLzG9JM3fqUesdAQAAAAC0y/TnyN4sWn6OLAAAAACge3XFz5Hl\n1GIAAAAAgKewkIU5ZhRs0d8W/W3R3xb9bdHfFv1t0d/7WMgCAAAAADyFGVkxIwsAAAAAbmFGFgAA\nAAAQdVjIwhwzCrbob4v+tuhvi/626G+L/rbo730sZAEAAAAAnsKMrJiRBQAAAAC3MCMLAAAAAIg6\nLGRhjhkFW/S3RX9b9LdFf1v0t0V/W/T3PhayAAAAAABPYUZWzMgCAAAAgFuYkQUAAAAARB0WsjDH\njIIt+tuivy3626K/Lfrbor8t+nsfC1kAAAAAgKcwIytmZAEAAADALczIAgAAAACiDgtZmGNGwRb9\nbdHfFv1t0d8W/W3R3xb9vY+FLAAAAADAU5iRFTOyAAAAAOAWZmQBAAAAAFGHhSzMMaNgi/626G+L\n/rbob4v+tuhvi/7ex0IWAAAAAOApzMiKGVkAAAAAcAszsgAAAACAqMNCFuaYUbBFf1v0t0V/W/S3\nRX9b9LdFf+9jIQsAAAAA8BRmZMWMLAAAAAC4hRlZAAAAAEDUYSELc8wo2KK/Lfrbor8t+tuivy36\n26K/97GQBQAAAAB4CjOyYkYWAAAAANzCjCwAAAAAIOqwkIU5ZhRs0d8W/W3R3xb9bdHfFv1t0d/7\nWMgCAAAAADyFGVkxIwsAAAAAbmFGFgAAAAAQdVjIwhwzCrbob4v+tuhvi/626G+L/rbo730sZAEA\nAAAAnsKMrJiRBQAAAAC3MCMLAAAAAIg6LGRhjhkFW/S3RX9b9LdFf1v0t0V/W/T3PhayAAAAAABP\nYUZWzMgCAAAAgFuYkQUAAAAARB0WsjDHjIIt+tuivy3626K/Lfrbor8t+nsfC1kAAAAAgKcwIytm\nZAEAAADALczIAgAAAACiDgtZmGNGwRb9bdHfFv1t0d8W/W3R3xb9vY+FLAAAAADAU5iRFTOyAAAA\nAOAWZmQBAAAAAFGHhSzMMaNgi/626G+L/rbob4v+tuhvi/7ex0IWAAAAAOApzMiKGVkAAAAAcAsz\nsgAAAACAqMNCFuaYUbBFf1v0t0V/W/S3RX9b9LdFf+9jIQsAAAAA8BRmZMWMLAAAAAC4hRlZAAAA\nAEDUYSELc8wo2KK/Lfrbor8t+tuivy3626K/97GQBQAAAAB4CjOyYkYWAAAAANzCjCwAAAAAIOqw\nkIU5ZhRs0d8W/W3R3xb9bdHfFv1t0d/7OLVYzacWAwAAAADc0dlTi1nIAgAAAAA8hVOLAQAAAACe\nwkIWAAAAAOApLGQBAAAAAJ7CQhYAAAAA4CksZAEAAAAAnuK33gFr+/bt05tvvqmmpiY98sgj+uEP\nf2i9Sz3amTNnVFBQoKqqKvl8Pk2YMEGTJ0/WhQsX9Prrr+vMmTP62te+pl/84hfq27ev9e72WE1N\nTXrhhReUlpamhQsX0t9FNTU1WrZsmf7zn/9IkmbPnq3bb7+d/i7ZsGGDPvroI/l8PqWnp2v27Nmq\nq6ujfzcJBAIqKSlRUlKSFi1aJEntfr7ZsGGDtm3bppiYGD377LMaPXq05e57XqT+q1evVklJifx+\nv2677TbNnj1bffr0kUT/rhapf4vCwkKtWbNGq1atUmJioiT6d7W2+v/973/Xli1bFBMTozFjxujJ\nJ5+URP+uFqn/4cOHtWrVKjU2Nio2NlYzZszQkCFDJHWwvxPFGhsbnblz5zqnT592GhoanAULFjjH\njx+33q0e7fz5886RI0ccx3GcS5cuOT/72c+c48ePO6tXr3beffddx3EcZ8OGDc6aNWsM97LnKyws\ndBYvXuy88sorjuM49HfRG2+84WzdutVxHMcJBoNOTU0N/V1y+vRpZ86cOU59fb3jOI7z2muvOdu2\nbaN/Nzpw4IBTXl7u/PKXvwxd11bv48ePOwsWLHAaGhqc06dPO3PnznUaGxtN9runiNT/448/DnVd\ns2YN/btRpP6O4ziff/658/LLLzuzZ892vvzyS8dx6N8dIvXfv3+/89vf/tZpaGhwHMdxqqqqHMeh\nf3eI1P+ll15ySktLHcdxnJKSEufXv/614zgd7x/VpxYfPnxYAwYMUP/+/eX3+5Wdna09e/ZY71aP\nlpKSoq9//euSpN69e2vQoEE6d+6c9uzZo+9+97uSpPHjx2v37t2Ge9mznT17VqWlpXrkkUdC19Hf\nHRcvXtTBgwdD7WNjY9WnTx/6u6RPnz6KjY1VXV2dGhsbVV9fr9TUVPp3o3vuueeqd7fb6r17925l\nZ2fL7/erf//+GjBggA4fPuz6Pvckkfrfe++9iolp/u/f0KFDde7cOUn07w6R+kvS22+/rdzc3Cuu\no3/Xi9T/gw8+0OOPPy6/v/mk1KSkJEn07w6R+t966626ePGipOYz1FJTUyV1vH9Un1p87tw59evX\nL3Q5NTWVF62LKisrdeTIEQ0dOlRVVVVKSUmRJCUnJ6uqqsp473qut956S7m5ubp06VLoOvq7o7Ky\nUklJSVq6dKmOHTumjIwMPf300/R3SWJioqZMmaLZs2erV69eGj16tO699176u6yt3ufPn9fQoUND\n90tLSwststA9tm3bpuzsbEn0d8vu3buVlpamu+6664rr6e+OkydP6uDBg1q7dq3i4uL01FNP6e67\n76a/S6ZPn64XX3xRq1evluM4evnllyV1/PUf1e/Iwk5tba0WLVqkZ555RgkJCVfc5vP5jPaq59u7\nd6+Sk5M1ePBgOY4T8T707z6NjY06cuSIJk6cqPz8fMXHx2vjxo1X3If+3efUqVPatGmTCgoKtHz5\nctXW1uqf//znFfehv7uu1Zs/j+6zfv16+f1+5eTktHkf+neturo6bdiwQVOnTg1d19a/xRL9u0Nj\nY6MuXLig3//+98rNzdXrr7/e5n3p3/WWLVumZ599VoFAQE8//bQCgUCb972e/lG9kE1NTdWZM2dC\nl8+ePRt6ixvdJxgMatGiRXrooYf0wAMPSGr+qvwXX3whqfmrMsnJyZa72GN99tln2rNnj+bMmaPF\nixerrKxMf/rTn+jvkrS0NKWmpoa+scG4ceNUXl6ulJQU+rugvLxcw4cP1y233KLY2FiNHTtWhw4d\nor/L2vp8k5qaqrNnz4bux7/J3Wf79u0qLS3VvHnzQtfRv/udPn1an3/+ufLy8jRnzhydO3dOL7zw\ngr744gv6uyQtLU1jx46VJA0ZMkQ+n0/V1dX0d8nhw4dD//cfN25c6EzYjvaP6oXs3XffrVOnTqmy\nslLBYFA7d+5UZmam9W71aI7jaNmyZRo0aJAee+yx0PWZmZnavn27JGnHjh3Kysoy2sOe7YknnlAg\nEFBBQYF+/vOfa+TIkZo3bx79XZKSkqJ+/frpxIkTkqT9+/frzjvv1P33309/FwwcOFCHDh1SfX29\nHMfR/v37dccdd9DfZW19vsnMzFRxcbGCwaAqKyt16tSp0Bd90HX27dun9957T3l5eerVq1foevp3\nv/T0dK1YsUIFBQUqKChQamqq8vPzlZKSQn+XZGVlqaysTJJ04sQJBYNBJSUl0d8lAwYM0IEDByRJ\nZWVlGjhwoKSOf/7xOe2d0xAFSktLr/jxO48//rj1LvVon3zyiV566SWlp6eHThmYPn26hgwZwo+/\ncNmBAwdUWFjIj99x2dGjR7V8+XIFg8HQj75oamqiv0s2btyoHTt2yOfzKSMjQ88//7xqa2vp300W\nL16sAwcOqLq6WikpKZo2bZqysrLa7L1+/Xpt27ZNsbGxeuaZZ3TfffcZH4G3te4/depUvfvuuwoG\ng6Ef+TJs2DDNnDlTEv27Wkv/L7/8UsnJyZo2bZoefvjh0O1z587VK6+8EvqzoH/XitT/O9/5jgKB\ngI4ePSq/36+f/OQn+uY3vymJ/l0t0uf/9PR0rVq1Sg0NDerVq5dmzpypwYMHS+pY/6hfyAIAAAAA\nvCWqTy0GAAAAAHgPC1kAAAAAgKewkAUAAAAAeAoLWQAAAACAp7CQBQAAAAB4CgtZAAAAAICn/B8s\nJOwa2+UpOAAAAABJRU5ErkJggg==\n", "text": [ "" ] } ], "prompt_number": 13 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Based on this plot, we see that the IPython folks are pretty fast when it comes to reviewing and merging pull requests \u2014 the ones that get committed, anyways. There are some outliers, though: some take up to half a year before getting committed.\n", "\n", "We can filter out all of these ranges that are larger than a month and ask: if a review takes less than a month, how long is it likely to take?" ] }, { "cell_type": "code", "collapsed": false, "input": [ "rcParams['figure.figsize'] = (15, 3)\n", "both_df[both_df['delta_days'] < 30][['delta_days']].boxplot(vert=False)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 14, "text": [ "{'boxes': [],\n", " 'caps': [,\n", " ],\n", " 'fliers': [,\n", " ],\n", " 'medians': [],\n", " 'whiskers': [,\n", " ]}" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nvq9ratL8/wYKfEzw8sD1wd8HrwveT+A5+cYRuD7UY3zbBW8bfO7hBI4reLtQxwt1nr5xhDvHQMHz\nGWoeo40z3Hh8fOcR2DMUbS4iPZ+xjivUY0I9X+HOP9x5xDuWeLYL95hIy6M9F6FyNNjxBObLItxr\nNtL2wfnxiXR+4XIQ7VjhxjiY/cVyrGjLY533aPuLN1+DOVa8+7PkPx6RehYH81q17suyH+vcD9UY\nh2t/Th8nlKHseR3K9wY3iPV6Hs97z3Aa6uvdUB0jlIh7OXHihA4ePKh169apt7dXpaWlmjJlirZu\n3aply5Zp4sSJeu+997Rt2zatXr1aUv9PXu+66y799a9/1eOPP64pU6ZIku655x499NBDkqRNmzbp\nyJEjuuOOO0Ie98UXX9STTz6poqIivfLKK/7leXl5euaZZ5Senq6PPvpIGzdu1HPPPaevfe1r2rVr\nl2bNmqX29na9++67+v73v6+XXnpJixcvVnFxsXp7e9Xb2zskkwYAAAAASKyIxeuxY8d05513atSo\nUZKkmTNnqru7W8ePH9f69ev92/X09EQ9UENDg3bu3KnOzk5dvHhRBQUFIYvXtrY2tbe3q6ioSJI0\nd+5c1dfX+4+zfft2nTp1SikpKfroo48kSV/+8pe1fft2tba26tChQ7rrrruUkpKim266SX/60590\n9uxZ3XnnnZo4cWJMk+K7h9/3iVLw975l4da7/ftF2+qvOue7r+vS/zx451Xb/77uI/2+7uqfWLN9\n//arf3tBb+zxqrMlU9Kz+tzn+tTZOfCGhvz8vMtfefzLamqu/KSgvHyUenpSQ67rf6zHv6ysLFOS\nR6dPp/rXlZVlXV6XpQ0bMpWe3qXrruvQyZP9y3ftalN6ep+KinIlSTt2ZGjLFo/On8/0H2fDhnR1\ndKRd9XWg9eszNWqU1Nbm0YQJOZJS1N3tUVFRhpqasvS7341Sb6/0ySdXzmXTpkylp3fq/Pl0zZiR\nI0k6fTpVtbWfqKnp82pu9ujMmSvbFxXlKjv7U82ff1oPPHCDamrSVFvbrH37xqmiIkOtrf1zO2VK\nlqRRysz0Dnj8a6+NknRReXkdqq8fp1dfHaXTp/vXv/BCpjo7++eyvDxDPT0Dn6etWzPU3u6R1KuO\njlSVlWXphRcylZ3doZaWK7dK5+TUa/r0s/7XU0XFMTU0fEbSjdqxI0O//a1XTU2+uU9XW1ubJk9u\n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\n", "text": [ "" ] } ], "prompt_number": 14 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Based on this, it looks like most reviews happen within the first five days. The median is (I'm eyeballing this) around 1 day. Not bad at all.\n", "\n", "If we look closely at the pull requests outside this range, we might see any number of things: pull requests that are large and hard to understand or pull requests that are blocked by some other task. I don't think pandas would help us much: we'd have to use our brains and look for patterns.\n", "\n", "OK, one more question. Can we see any relationship between the review time and the number of files modified by the last pull request commit? This is a sad way to do it \u2014 since I'm not taking into account all commits on a pull request, I'm missing a lot of useful information \u2014 but it might be fun." ] }, { "cell_type": "code", "collapsed": false, "input": [ "# The data is skewed, so i'll use the spearman correlation\n", "both_df[['churn', 'delta']].corr(method='spearman')\n" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
churndelta
churn 1.000000 0.048028
delta 0.048028 1.000000
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 15, "text": [ " churn delta\n", "churn 1.000000 0.048028\n", "delta 0.048028 1.000000" ] } ], "prompt_number": 15 }, { "cell_type": "markdown", "metadata": {}, "source": [ "There's almost no correlation, and the correlation that is there is probably just noise. Should we conclude that the number of files that you change in a pull request doesn't affect how long it will take to be reviewed? I don't think so, for two reasons:\n", "\n", "1. I'm completely ignoring pull requests that get ignored or closed. My professor has looked at [how long it takes patches to get accepted on large open source projects like linux](https://research.microsoft.com/apps/pubs/default.aspx?id=193432) and he found that on certain projects like Linux, large patches were ignored or rejected. No one had time to understand them and review them. This might be the case for IPython. (Does anybody from the IPython project think this is true?)\n", "2. I'm only processing the tip of the pull request branch. A pull request can have many commits, and I should incorporate those into my churn metric." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I didn't really make any claims here, but let's pretend this is a real paper.\n", "\n", "## Threats to Validity\n", "\n", "1. It is 1am on a Friday night.\n", "2. The churn metric only represents the tip (ha) of the pull request iceberg.\n", "3. This analysis doesn't look at how review time changed over time. Can we get a less skewed picture of pull request length by looking at only the period in which the project was funded?\n", "4. This analysis doesn't look at actual review time \u2014 the pull request could have been made much later than when the pull request commit was made.\n", "\n", "## Conclusions\n", "\n", "1. The IPython folks are very prompt. Send them a decent pull request and they'll probably merge it within a day.\n", "2. The IPython Notebook is pretty cool.\n", "\n", "## Updates\n", "\n", "A previous version of this notebook was incorrectly adding timezone differences to timestamps. After some experimentation, I've discovered that the timestamps provided by `git2json` don't need to be adjusted for timezone unless you want to display it in a human-readable format. Fixing this bug solved the \"time travel\" issue." ] } ], "metadata": {} } ] }