blameall.py

One thing I’ve missed from Perforce since using Subversion is the “p4 annotate -a” command. This annotates a file with the revisions that introduced each line, much like the “svn blame” command. But the -a switch tells it to include every revision of every line. This is a way of getting the complete history of the file in one textual output. It’s great for finding a snippet that you suspect existed somewhere in the file’s past.

Blameall.py provides the same feature, but for Subversion.

For example, let’s say you have a file with a number of revisions. Revision 26:

Shopping List

- Milk
- Bread
- Eggs

Revision 27:

Shopping List

- Milk
- Juice

Revision 28:

Shopping List

- Juice
- Cereal
- Ice Cream

Running blameall shows the history of the file in one series of lines:

$ python blameall.py shoplist.txt
26 27 28
   26  head Shopping List
   26  head
   26    27 - Milk
   26    26 - Bread
   27  head - Juice
   26    26 - Eggs
   28  head - Cereal
   28  head - Ice Cream
   26  head

This shows us that “Milk” appeared in revision 26 and was present through revision 27. “Shopping List” appeared in 26, and is still in the file in the head revision.

It can be slow to get all the revisions, but it’s faster than manually searching through old revisions for that piece you know was back there somewhere.

You can provide a -r argument to blameall to limit its attention to a particular range of revisions.

Getting it

Blameall is a single-file Python script, no need to install anything. Just download and run:

Download: blameall.py

Comments

Add a comment:

Ignore this:
Leave this empty:
Name is required. Either email or web are required. Email won't be displayed and I won't spam you. Your web site won't be indexed by search engines.
Don't put anything here:
Leave this empty:
Comment text is Markdown.