Dropbox Commit Graphs

For my dissertation, I've shown bar charts for commits in every week. I think these are x100 better for showing ACTUAL progress and it was clear where I had made less progress than some weeks (though this was entirely justified).

Unfortunately, as good as Dropbox is, it really lacks a graphing tool (I did try to find one) or any kind of statistical analysis. It's been a bit of a pain to get what I wanted, but I managed in the end. See attachment to this post for an example :)

And oh yeah, you need some form of unix commands to follow this guide (Ubuntu and Mac will have them - for Windows you'll need cygwin or something).

1. Download iMacros for Firefox (as its better supported than the Chrome version) - https://addons.mozilla.org/en-US/firefox/addon/imacros-for-firefox/

2. Go to https://www.dropbox.com/events?ns=false&n=REVISION_LIMIT&d=START_DATE and replace the tags with your desired information. Eg. last 166 commits from 14th of December 2011:
https://www.dropbox.com/events?ns=false&n=166&d=12-14-2011

3. Execute this macro code on a loop (same number as your revision limit) - you can test it before you run it!:

VERSION BUILD=7401110 RECORDER=FXTAB T=1
SAVEAS TYPE=CPL FOLDER=~/Desktop/dropboxstats
FILE={{!URLCURRENT}}
TAG POS=1 TYPE=A ATTR=ID:newer-events

4. Collate files by doing:

cd ~/Desktop/dropboxstats
cat * > dropbox_history

5. Copy this script and save as parsedropbox.py (sorry indenting was lost in HTML :( ):

from HTMLParser import HTMLParser
from datetime import datetime
import dateutil.parser
import sys
class MyHTMLParser(HTMLParser):
def __init__(self, itemOfInterest):
self.start=""
self.item=""
self.itemOfInterest = itemOfInterest
HTMLParser.__init__(self)
def handle_starttag(self, tag, attrs):
self.start=tag
self.modified=False
if tag=="td" or tag=="a":
for attr in attrs:
if attr[1]=="modified":
self.modified=True
if attr[1].find(self.itemOfInterest)>-1:
self.item=self.itemOfInterest
def handle_endtag(self, tag):
self.end=tag
def handle_data(self, data):
if self.start=="td":
if self.modified:
if self.item==self.itemOfInterest:
dateString=data.strip()
commitDate=datetime.strptime(dateString,'%m/%d/%Y %I:%M %p')
sys.stdout.write(commitDate.strftime('%Y-%m-%d')+'\n')
self.item=""
parser = MyHTMLParser(sys.argv[1])
print sys.argv[1]
data = ''
for line in sys.stdin:
data+=line
parser.feed(data)

5. Run this:
cat dropbox_history | python parsedropbox.py ITEM_OF_INTEREST | sort | uniq -c

Replace ITEM_OF_INTEREST with whatever you're interested in :) For me, it could be "Intelligent Algorithms" or "3YP" (Third Year Project).

This will count commits for each commit date!

I may make this code more user-friendly at some point.

You can now easily import this data into OpenOffice (and the like) for plotting your own graphs :)

I do hope Dropbox introduce some graphing feature soon (or at least, someone develops an official plugin for it...)

Cheers,
Nick

AttachmentSize
Image icon svncommitsbeforexmas.png31.04 KB

Add new comment

(If you're a human, don't change the following field)
Your first name.
(If you're a human, don't change the following field)
Your first name.

Filtered HTML

  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Lines and paragraphs break automatically.

Plain text

  • No HTML tags allowed.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.