Jon Aquino's Mental Garden

Engineering beautiful software jon aquino labs | personal blog

Tuesday, October 16, 2007

SVN Time-Lapse View

The skinny: There's now a Time-Lapse View for Subversion.

s

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.

20 Comments:

  • Very cool Jon. Thanks for contributing this!

    By Anonymous Anonymous, at 10/16/2007 6:43 a.m.  

  • What libraries do I need installed to use this? When I try to load a file from SVN, I get this:

    ava.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)

    By Blogger Alex, at 10/16/2007 9:28 a.m.  

  • Todd - You're most welcome!

    Alex - Sorry about that - I've added some missing svnkit jars in Version 1.1.

    By Blogger Jonathan, at 10/16/2007 12:44 p.m.  

  • Jon, this is amazing - how long did it take for you to do this?

    I speak for all the mac users in the office by asking that is this built in Java, and thus available to mac users too?

    By Anonymous Anonymous, at 10/16/2007 6:42 p.m.  

  • 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.

    Yup, it works on any Mac with Java installed - just double-click the .jar file.

    By Blogger Jonathan, at 10/16/2007 10:35 p.m.  

  • 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.

    By Blogger Unknown, at 10/18/2007 10:25 a.m.  

  • Very cool! I'll definitely check that out.

    By 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.

    By Blogger David Glasser, at 10/18/2007 4:36 p.m.  

  • Alan - Alas, I haven't. Have you tried opening a local workspace file? Maybe it will work that way.

    David - Thanks for pointing that out - fixed!

    By Blogger Jonathan, at 10/18/2007 9:18 p.m.  

  • Very nice. Thanks a lot.
    I am spreading the word.

    Cheers

    By Blogger Unknown, at 10/19/2007 9:10 a.m.  

  • This is a really nice tool, but it would really benefit from some additional UI elements.

    - 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 :)

    By Anonymous Anonymous, at 10/19/2007 3:26 p.m.  

  • Nuin - Thanks a bunch.

    Anon - Great suggestions!

    By Blogger Jonathan, at 10/19/2007 7:40 p.m.  

  • This is fantastic! Thanks for making a great tool.

    By Anonymous Anonymous, at 10/20/2007 4:19 p.m.  

  • My pleasure!

    By Blogger Jonathan, at 10/20/2007 5:37 p.m.  

  • If the value of the "Limit" field is greater than the number of revisions of the file, I get an exception:

    java.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!

    By Blogger Emphyrio, at 10/23/2007 6:31 a.m.  

  • John - sorry about that - fixed in Version 1.5.

    By Blogger Jonathan, at 10/23/2007 6:58 p.m.  

  • Java newbie here. Whenever I do a
    C:\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??....

    By Blogger Unknown, at 10/24/2007 9:23 p.m.  

  • Hi Cherian. You need to be running at least Java 1.5 for SVN Time-Lapse View to work.

    (Boolean.parseBoolean is in Java 1.5).

    By Blogger Jonathan, at 3/18/2009 7:43 p.m.  

  • Do you plan on doing sth similar for Git?

    By Anonymous GitNoob, at 6/09/2009 9:36 a.m.  

  • One day, perhaps. Or why don’t you try your hand at it? Hopefully git has a Java interface.

    By Blogger Jonathan, at 6/09/2009 6:28 p.m.  

  • Ok, git time lapse view is here:
    https://github.com/JonathanAquino/git-time-lapse-view

    By Blogger Jonathan, at 5/25/2015 8:47 a.m.  

Post a Comment

<< Home