One of the things I missed from Perforce was its excellent "Time-Lapse View". It's basically a window with a slider that you could drag to view all revisions of a file. Kind of like Subversion's blame command, but applied to whatever revision you scrolled to. Differences between revisions are highlighted.
Well now we have a Time-Lapse View for the Subversion world, as you can see from the screenshot above. First, select your file then press Load. The last 100 revisions will be downloaded (you can stop it early if it is taking too long). Then you can drag the slider to find out exactly when that line was added, or who deleted your cool function, or why that code was changed.
Very cool Jon. Thanks for contributing this!
ReplyDeleteWhat libraries do I need installed to use this? When I try to load a file from SVN, I get this:
ReplyDeleteava.lang.NoClassDefFoundError: ch/ethz/ssh2/InteractiveCallback
at org.tmatesoft.svn.core.internal.io.svn.SVNGanymedConnector.open(SVNGanymedConnector.java:66)
at org.tmatesoft.svn.core.internal.io.svn.SVNConnection.open(SVNConnection.java:60)
at org.tmatesoft.svn.core.internal.io.svn.SVNRepositoryImpl.openConnection(SVNRepositoryImpl.java:970)
at org.tmatesoft.svn.core.internal.io.svn.SVNRepositoryImpl.getLatestRevision(SVNRepositoryImpl.java:140)
at com.jonathanaquino.svntimelapseview.SvnLoader.loadRevisionsProper(SvnLoader.java:87)
at com.jonathanaquino.svntimelapseview.SvnLoader.access$0(SvnLoader.java:80)
at com.jonathanaquino.svntimelapseview.SvnLoader$2.execute(SvnLoader.java:63)
at com.jonathanaquino.svntimelapseview.helpers.MiscHelper.handleExceptions(MiscHelper.java:23)
at com.jonathanaquino.svntimelapseview.SvnLoader$1.run(SvnLoader.java:61)
at java.lang.Thread.run(Thread.java:619)
Todd - You're most welcome!
ReplyDeleteAlex - Sorry about that - I've added some missing svnkit jars in Version 1.1.
Jon, this is amazing - how long did it take for you to do this?
ReplyDeleteI speak for all the mac users in the office by asking that is this built in Java, and thus available to mac users too?
Hi Paul - It's been percolating in my mind for some weeks now, but on the weekend I just decided to sit down and do it.
ReplyDeleteYup, it works on any Mac with Java installed - just double-click the .jar file.
Have you ever tried it with svn+ssh:// URLs? I have a couple of svn repos behind svn and I can't access them via this or other svnkit-based java apps such as jedit's svn plugin.
ReplyDeleteVery cool! I'll definitely check that out.
ReplyDeleteBy the way, the links (on the code.google site) to the screen shots require you to be logged in to Flickr to see them. That may not have been intentional.
Alan - Alas, I haven't. Have you tried opening a local workspace file? Maybe it will work that way.
ReplyDeleteDavid - Thanks for pointing that out - fixed!
Very nice. Thanks a lot.
ReplyDeleteI am spreading the word.
Cheers
This is a really nice tool, but it would really benefit from some additional UI elements.
ReplyDelete- A file list tree pane would be ideal
- Not having to press enter inside one of the fields to make the load happen (this should be active from the pane
- Local project lists, or repository browsing
- Being able to lock one of the frames to a specific version for direct comparison
Great job otherwise - thanks for the app :)
Nuin - Thanks a bunch.
ReplyDeleteAnon - Great suggestions!
This is fantastic! Thanks for making a great tool.
ReplyDeleteMy pleasure!
ReplyDeleteIf the value of the "Limit" field is greater than the number of revisions of the file, I get an exception:
ReplyDeletejava.lang.IndexOutOfBoundsException: toIndex = 100
at java.util.SubList.<init>(Unknown Source)
at java.util.RandomAccessSubList.<init>(Unknown Source)
at java.util.AbstractList.subList(Unknown Source)
at com.jonathanaquino.svntimelapseview.SvnLoader.loadRevisionsProper(SvnLoader.java:89)
at com.jonathanaquino.svntimelapseview.SvnLoader.access$0(SvnLoader.java:80)
at com.jonathanaquino.svntimelapseview.SvnLoader$2.execute(SvnLoader.java:63)
at com.jonathanaquino.svntimelapseview.helpers.MiscHelper.handleExceptions(MiscHelper.java:24)
at com.jonathanaquino.svntimelapseview.SvnLoader$1.run(SvnLoader.java:61)
at java.lang.Thread.run(Unknown Source)
Otherwise it works fine -- a very useful tool!
John - sorry about that - fixed in Version 1.5.
ReplyDeleteJava newbie here. Whenever I do a
ReplyDeleteC:\Documents and Settings\cherian\Desktop\svn-time-lapse-view-1.3\svn-time-lapse
-view>java -jar SvnTimeLapseView.jar
I get
Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.simontuffs.onejar.Boot.run(Boot.java:243)
at com.simontuffs.onejar.Boot.main(Boot.java:89)
Caused by: java.lang.NoSuchMethodError: java.lang.Boolean.parseBoolean(Ljava/lan
g/String;)Z
at com.jonathanaquino.svntimelapseview.Configuration.getBoolean(Configur
ation.java:123)
at com.jonathanaquino.svntimelapseview.ApplicationWindow.initializeWindo
wPosition(ApplicationWindow.java:236)
at com.jonathanaquino.svntimelapseview.ApplicationWindow.initialize(Appl
icationWindow.java:113)
at com.jonathanaquino.svntimelapseview.ApplicationWindow.snipped init tag (Applicat
ionWindow.java:96)
at com.jonathanaquino.svntimelapseview.Application.main(Application.java
:41)
... 6 more
Am I missing libraries??....
Hi Cherian. You need to be running at least Java 1.5 for SVN Time-Lapse View to work.
ReplyDelete(Boolean.parseBoolean is in Java 1.5).
Do you plan on doing sth similar for Git?
ReplyDeleteOne day, perhaps. Or why don’t you try your hand at it? Hopefully git has a Java interface.
ReplyDeleteOk, git time lapse view is here:
ReplyDeletehttps://github.com/JonathanAquino/git-time-lapse-view