GIT Tracker

Installation and usage

  • $ gem install tracker-client

  • $ git clone git://github.com/mifo/tracker.git

  • $ cd tracker

  • $ bundle

  • $ rackup config.ru

This will start the web server on port 9292. Now navigate to http://localhost:9292/patches. The page appears to be empty, because you don't have any patches recorded yet.

Now choose a GIT repo from where you want to record your patches. That repo should have a designated branch with your work checked out (it should be the current working branch).

Now you can record the patches:

  • $ tracker record -d PATH_TO_YOUR_GIT_REPO

Then you may refresh the blank web page and you should see something like this:

img1

Good. You have just recorded your patches, so now you don't loose track of them. Go ahead, send your patches to the mailing list, and find someone who will review your patches.

If the person is happy about what you did, and wants to give you an ACK, then he can do it by:

  • $ tracker ack -d PATH_TO_REVIEWER_GIT_REPO

NOTE: He must have the branch with applied patches set as 'current', so tracker can read the history and get the patch hashes.

Now if you refresh the web page, you will see that all patches are marked by 'ACK' and are green:

img2

That means, they are good to go. Lets push them. Before push, you may indicate, that you're going to push them:

  • $ tracker push -d PATH_TO_YOUR_REPO

The patches will get the 'PUSH' stamp and tracker job is done here. You may push your patches to remote GIT repository now :-)

TODO

  • authentication (static YAML file?)
  • tracker status
  • git hook integration
  • mail notification
  • others?

Designed workflow:

  • 0. Person A: $ git checkout awesome_pathes
  • 0. Person A: $ git rebase -i master
  • 0. Person A: $ git format-patch -o /tmp/patches master
  • 1. Person A: $ git send-email --thread /tmp/patches
    1. Person A: $ tracker record -> (Sends all patches to the 'tracker' application, they appear as 'NEW'. Each patch is 'identified' by its commit HASH)
    1. Person B: Review patches on the mailing list, ie. creates a new branch in his local GIT and applies patches, then Person runs on his local machine in the GIT repo on local branch he created:

$ tracker ack ('tracker' will set all patch hashes in application to ACK)

$ tracker nack ('tracker' will set all patch hashes in application to NACK)

$ tracker [ack|nack] hash ('tracker' will ACK/NACK just specified hash in application)

  • 4. Person A: $ git checkout awesome_patches
  • 5. Person A: $ tracker status

This should print status of review for each commit, like:


  [ ACK ] 2ad28717 Commit Message 1
  [ NCK ] 2fb0cbb0 Commit Message 2
  [ NEW ] 34fb7b78 Commit Message 3
  • 5. Person A: $ git push -> (Pushes ACK'ed patches).
  • 6. Person A: $ tracker pushed [patches] -> (Notifies tracker that the patches were pushed, ie. set status of patches to PUSH)
  • 7. Person A: Buy beer to Person B ;-)