Revision graph

The revision graph is a little bit special, it's not like the other features found in TortoiseSVN. It shows a graph of a file or folder through the history with all the revision where the file or folder was copied, moved, branched or tagged.

We often get people asking questions why it needs to get the log for the repository root, or why it needs to get the full log from the HEAD revision back down to the first revision.

Just to make this clear: this is not because we're lazy programmers or because we're too stupid to optimize it, even though some of you seem to imply that. It is really necessary.

The revision graph shows the history of a selected file or folder by finding all revisions where the selected item was copied. And the graph has to do that by using the information that is available.

If you look at the log messages for your selected file or folder, you can see in the lower pane of the log dialog all affected paths of the selected revision. That information is what we use for the revision graph.
You will also notice that if you just show the log for e.g. /trunk, you won't see any entries in the log dialog for revisions which happened in a tag or branch. You won't even see an entry where you tagged or branched /trunk itself in that log.
--> that's why we must fetch the log for the repository root: only the log of the repository root will give us all the information we need, including when and where a path has been copied/branched/tagged/moved to.

If we would only fetch the log for a specific range and not all revisions, we could miss the revision where (still using the example above with /trunk) the trunk was branched or tagged. And even though there are changes to those branches and tags or they still exist in the revision range, the graph could not know that those branches/tags were made from /trunk and not from some other path. That means, the graph would not just be incomplete, it would be wrong.

And no: we will never change that. Because there's nothing worse than a graph that's only sometimes correct - you would never know when and if it is correct, which means it would be worse than useless.