You can subscribe to this list here.
2003 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(15) |
Oct
(23) |
Nov
|
Dec
(25) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2004 |
Jan
(9) |
Feb
|
Mar
|
Apr
|
May
(76) |
Jun
(207) |
Jul
(242) |
Aug
(42) |
Sep
(33) |
Oct
|
Nov
(7) |
Dec
(1) |
2005 |
Jan
|
Feb
|
Mar
(5) |
Apr
|
May
|
Jun
|
Jul
(3) |
Aug
(66) |
Sep
(38) |
Oct
(6) |
Nov
|
Dec
(2) |
2006 |
Jan
(17) |
Feb
(5) |
Mar
(28) |
Apr
(6) |
May
|
Jun
|
Jul
(1) |
Aug
|
Sep
|
Oct
(1) |
Nov
(1) |
Dec
(7) |
2007 |
Jan
|
Feb
|
Mar
|
Apr
(7) |
May
(33) |
Jun
(4) |
Jul
(3) |
Aug
|
Sep
(5) |
Oct
|
Nov
|
Dec
|
2008 |
Jan
(4) |
Feb
(3) |
Mar
(2) |
Apr
|
May
(1) |
Jun
|
Jul
(6) |
Aug
(8) |
Sep
(5) |
Oct
(20) |
Nov
(7) |
Dec
(9) |
2009 |
Jan
(8) |
Feb
(3) |
Mar
(20) |
Apr
(10) |
May
(40) |
Jun
(11) |
Jul
(23) |
Aug
(4) |
Sep
(1) |
Oct
(1) |
Nov
|
Dec
(2) |
2010 |
Jan
(5) |
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
(1) |
Jul
|
Aug
(2) |
Sep
|
Oct
|
Nov
|
Dec
|
2011 |
Jan
|
Feb
|
Mar
|
Apr
(3) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(1) |
2012 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(1) |
Sep
|
Oct
|
Nov
|
Dec
|
2013 |
Jan
|
Feb
|
Mar
|
Apr
(6) |
May
(22) |
Jun
(2) |
Jul
|
Aug
|
Sep
|
Oct
(2) |
Nov
(1) |
Dec
(2) |
2014 |
Jan
(5) |
Feb
|
Mar
|
Apr
|
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(1) |
Dec
|
2015 |
Jan
(1) |
Feb
(2) |
Mar
(1) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2016 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(1) |
Nov
|
Dec
|
2017 |
Jan
|
Feb
|
Mar
(1) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Simon K. <s_k...@us...> - 2004-06-11 00:04:01
|
Update of /cvsroot/clirr/clirr/src/java/net/sf/clirr/cli In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4177/net/sf/clirr/cli Added Files: Clirr.java Log Message: A commandline interface for running the checks. --- NEW FILE --- ////////////////////////////////////////////////////////////////////////////// // Clirr: compares two versions of a java library for binary compatibility // Copyright (C) 2003 - 2004 Lars K?hne // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ////////////////////////////////////////////////////////////////////////////// package net.sf.clirr.cli; import org.apache.commons.cli.BasicParser; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.Options; import org.apache.commons.cli.HelpFormatter; import org.apache.commons.cli.ParseException; import java.io.File; import java.io.PrintWriter; import java.io.IOException; import java.util.Arrays; import java.util.ArrayList; import java.net.URL; import java.net.MalformedURLException; import java.net.URLClassLoader; import net.sf.clirr.Checker; import net.sf.clirr.event.DiffListener; import net.sf.clirr.event.PlainDiffListener; import net.sf.clirr.event.XmlDiffListener; import net.sf.clirr.event.ScopeSelector; import net.sf.clirr.framework.ClassSelector; import net.sf.clirr.framework.CheckerException; /** * Commandline interface for generating a difference report or checking * for binary compatibility between two versions of the same application. */ public class Clirr { private static final File[] EMPTY_FILE_ARRAY = new File[]{}; // =================================================================== public static void main(String[] args) { new Clirr().run(args); } // =================================================================== private void run(String[] args) { System.out.println("reporting diffs.."); BasicParser parser = new BasicParser(); Options options = new Options(); options.addOption("o", "oldversion", true, "jar files of old version"); options.addOption("n", "newversion", true, "jar files of new version"); options.addOption("s", "style", true, "output style"); options.addOption("a", "show-all-scopes", false, "show private and package classes"); options.addOption("f", "output-file", true, "output file name"); CommandLine cmdline = null; try { cmdline = parser.parse(options, args); } catch(ParseException ex) { System.err.println("Invalid command line arguments."); usage(options); System.exit(-1); } // TODO: provide commandline options that allow the user to // specify which packages/classes should be checked // ClassSelector classSelector = new ClassSelector(ClassSelector.MODE_UNLESS); String oldPath = cmdline.getOptionValue('o'); String newPath = cmdline.getOptionValue('n'); String style = cmdline.getOptionValue('s', "text"); String outputFileName = cmdline.getOptionValue('f'); boolean showAll = cmdline.hasOption('a'); if ((oldPath == null) || (newPath == null)) { usage(options); System.exit(-1); } Checker checker = new Checker(); if (cmdline.hasOption('a')) { checker.getScopeSelector().selectPrivate(true); checker.getScopeSelector().selectPackage(true); } DiffListener diffListener = null; if (style.equals("text")) { try { diffListener = new PlainDiffListener(outputFileName); } catch(IOException ex) { System.err.println("Invalid output file name."); } } else if (style.equals("xml")) { try { diffListener = new XmlDiffListener(outputFileName); } catch(IOException ex) { System.err.println("Invalid output file name."); } } else { System.err.println("Invalid style option. Must be one of 'text', 'xml'."); usage(options); System.exit(-1); } File[] origJars = pathToFileArray(oldPath); File[] newJars = pathToFileArray(newPath); ClassLoader loader1 = new URLClassLoader(new URL[] {}); ClassLoader loader2 = new URLClassLoader(new URL[] {}); checker.addDiffListener(diffListener); try { checker.reportDiffs(origJars, newJars, loader1, loader2, classSelector); } catch(CheckerException ex) { System.err.println("Unable to complete checks:" + ex.getMessage()); System.exit(1); } } private void usage(Options options) { HelpFormatter hf = new HelpFormatter(); PrintWriter out = new PrintWriter(System.err); hf.printHelp( 75, "java net.sf.clirr.cmdline.CheckRunner -o path -n path [options]", null, options, null); } private File[] pathToFileArray(String path) { ArrayList files = new ArrayList(); int pos = 0; while (pos < path.length()) { int colonPos = path.indexOf(pos, ':'); if (colonPos == -1) { files.add(new File(path.substring(pos))); break; } files.add(new File(path.substring(pos, colonPos))); pos = colonPos + 1; } return (File[]) files.toArray(EMPTY_FILE_ARRAY); } } |
From: Simon K. <s_k...@us...> - 2004-06-11 00:03:34
|
Update of /cvsroot/clirr/clirr/src/java/net/sf/clirr/ant In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3546/net/sf/clirr/ant Modified Files: AntTask.java Log Message: Checker now throws CheckerException instead of ant.BuildException, so here we catch the CheckerException and rethrow as a BuildException. Index: AntTask.java =================================================================== RCS file: /cvsroot/clirr/clirr/src/java/net/sf/clirr/ant/AntTask.java,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- AntTask.java 5 Jun 2004 16:36:44 -0000 1.10 +++ AntTask.java 11 Jun 2004 00:03:21 -0000 1.11 @@ -31,6 +31,8 @@ import net.sf.clirr.Checker; import net.sf.clirr.event.PlainDiffListener; import net.sf.clirr.event.XmlDiffListener; +import net.sf.clirr.framework.CheckerException; + import org.apache.tools.ant.BuildException; import org.apache.tools.ant.DirectoryScanner; import org.apache.tools.ant.Project; @@ -242,7 +244,14 @@ } checker.addDiffListener(counter); - checker.reportDiffs(origJars, newJars, origThirdPartyLoader, newThirdPartyLoader, null); + try + { + checker.reportDiffs(origJars, newJars, origThirdPartyLoader, newThirdPartyLoader, null); + } + catch(CheckerException ex) + { + throw new BuildException(ex.getMessage()); + } if (counter.getWarnings() > 0 && failOnWarning || counter.getErrors() > 0 && failOnError) { |
From: Simon K. <s_k...@us...> - 2004-06-11 00:02:35
|
Update of /cvsroot/clirr/clirr/src/java/net/sf/clirr In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2826/net/sf/clirr Modified Files: Checker.java Log Message: Add a new exception type to be used for reporting failures of the checking process. Modify Checker.java to throw this exception rather than an ant.BuildException instance on failure. Index: Checker.java =================================================================== RCS file: /cvsroot/clirr/clirr/src/java/net/sf/clirr/Checker.java,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- Checker.java 5 Jun 2004 16:36:44 -0000 1.11 +++ Checker.java 11 Jun 2004 00:02:21 -0000 1.12 @@ -52,8 +52,7 @@ import org.apache.bcel.util.ClassSet; import org.apache.bcel.util.Repository; import org.apache.bcel.util.ClassLoaderRepository; -import org.apache.tools.ant.BuildException; - +import net.sf.clirr.framework.CheckerException; /** * This is the main class to be used by Clirr frontends, @@ -171,6 +170,7 @@ File[] origJars, File[] newJars, ClassLoader origThirdPartyLoader, ClassLoader newThirdPartyLoader, ClassSelector classSelector) + throws CheckerException { if (classSelector == null) { @@ -206,6 +206,7 @@ ClassLoader thirdPartyClasses, ScopeSelector scopeSelector, ClassSelector classSelector) + throws CheckerException { if (classSelector == null) { @@ -229,7 +230,7 @@ } catch (IOException ex) { - throw new BuildException("Cannot open " + jarFile + " for reading", ex); + throw new CheckerException("Cannot open " + jarFile + " for reading", ex); } Enumeration enumEntries = zip.entries(); while (enumEntries.hasMoreElements()) @@ -249,7 +250,9 @@ return ret; } - private static JavaClass extractClass(ZipEntry zipEntry, ZipFile zip, Repository repository) + private static JavaClass extractClass( + ZipEntry zipEntry, ZipFile zip, Repository repository) + throws CheckerException { String name = zipEntry.getName(); InputStream is = null; @@ -264,7 +267,7 @@ } catch (IOException ex) { - throw new BuildException("Cannot read " + zipEntry.getName() + " from " + zip.getName(), ex); + throw new CheckerException("Cannot read " + zipEntry.getName() + " from " + zip.getName(), ex); } finally { @@ -276,7 +279,7 @@ } catch (IOException ex) { - throw new BuildException("Cannot close " + zip.getName(), ex); + throw new CheckerException("Cannot close " + zip.getName(), ex); } } } @@ -295,6 +298,7 @@ } catch (MalformedURLException ex) { + // this should never happen final IllegalArgumentException illegalArgumentException = new IllegalArgumentException("Cannot create classloader with jar file " + jarFile); illegalArgumentException.initCause(ex); |
From: Simon K. <s_k...@us...> - 2004-06-11 00:02:35
|
Update of /cvsroot/clirr/clirr/src/java/net/sf/clirr/framework In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2826/net/sf/clirr/framework Added Files: CheckerException.java Log Message: Add a new exception type to be used for reporting failures of the checking process. Modify Checker.java to throw this exception rather than an ant.BuildException instance on failure. --- NEW FILE --- ////////////////////////////////////////////////////////////////////////////// // Clirr: compares two versions of a java library for binary compatibility // Copyright (C) 2003 - 2004 Lars Kühne // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ////////////////////////////////////////////////////////////////////////////// package net.sf.clirr.framework; /** * An exception class representing a failure during checking of the * specified jar files. * <p> * The Clirr coding conventions use checked exceptions (such as this one) * for errors whose cause is something external to the clirr library/app. * Unchecked exceptions are used for errors that are due to bugs within * clirr code (assertion-violation type problems). */ public class CheckerException extends Exception { public CheckerException(String msg) { super(msg); } public CheckerException(String msg, Throwable t) { super(msg, t); } } |
From: Simon K. <s_k...@us...> - 2004-06-10 23:56:57
|
Update of /cvsroot/clirr/clirr In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27948 Modified Files: project.xml Log Message: Added commons-cli and commons-lang as dependencies, due to the new cli interface class. Index: project.xml =================================================================== RCS file: /cvsroot/clirr/clirr/project.xml,v retrieving revision 1.19 retrieving revision 1.20 diff -u -r1.19 -r1.20 --- project.xml 25 May 2004 04:36:47 -0000 1.19 +++ project.xml 10 Jun 2004 23:56:49 -0000 1.20 @@ -146,6 +146,18 @@ <version>1.5.3-1</version> <url>http://ant.apache.org</url> </dependency> + <dependency> + <groupId>commons-cli</groupId> + <artifactId>commons-cli</artifactId> + <version>1.0</version> + <url>http://jakarta.apache.org/commons-cli</url> + </dependency> + <dependency> + <groupId>commons-lang</groupId> + <artifactId>commons-lang</artifactId> + <version>1.0.1</version> + <url>http://jakarta.apache.org/commons-lang</url> + </dependency> </dependencies> <!-- build information for the project --> |
From: Simon K. <s_k...@us...> - 2004-06-10 23:18:58
|
Update of /cvsroot/clirr/clirr/src/java/net/sf/clirr/cli In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9818/cli Log Message: Directory /cvsroot/clirr/clirr/src/java/net/sf/clirr/cli added to the repository |
From: <Lar...@pp...> - 2004-06-10 07:07:03
|
testing from an unsubscribed address... -- Lars K=FChne ppi Media GmbH Deliusstra=DFe 10 D-24114 Kiel phone +49 (0) 43 1-53 53-2 15 fax +49 (0) 43 1-53 53-2 22 web www.ppi.de |
From: <lak...@t-...> - 2004-06-10 05:59:45
|
(resending as I may have sent it with a moderated email address) Sending on behalf of Vincent: Hi Lars, Please find attached the proposed new directory structure + build (it requires some tuning but it should give an idea of how it works). To build the whole project, run "maven dist" in clirr/ To build only the framework project, cd to clirr/framework/ and type "maven jar" or "maven dist". To build the whole website, run "maven multiproject:site" in clirr/. If we want to customize the home page we'll need to add a top level xdoc/ directory. Notice also that I've named the clirr framework artifact: clirr-framework (instead of just clirr). Let me know if I can commit this. Also, I think we would need to update or java package structure for the framework project: net.sf.clirr.framework net.sf.clirr.integration.ant net.sf.clirr.integration.maven net.sf.clirr.integration.eclipse [...] If we keep net.sf.clirr for the framework it will be more difficult to change in the future so we may want to get it right now (that's what I had to do for Cactus...). What do you think? -Vincent |
From: Simon K. <si...@ec...> - 2004-06-10 05:56:06
|
Hi, > > > >>>* is net.sf.clirr.cmdline.CheckRunner a good name/package for the > >>> command-line interface? > >>> > >>I had net.sf.clirr.cmdline.Clirr in mind. Choose whatever you like > >> > >> > > > >hmmm... Wouldn't it be better to group all the different integration > >modules in: > > > >n.s.c.integration.ant > >n.s.c.integration.maven > >n.s.c.integration.eclipse > >n.s.c.integration.cli I think this is rather too deep myself. Clirr isn't that big a project; it is only likely to have a couple more packages added at the n.s.c level, if that. And in particular, command-line users will need to type the classname so I don't want to make it too long. > > > >Note that I personally prefer cli to cmdline as cli is more commonly > >used for command line interface. Ok, net.sf.clirr.cli.Clirr shall be the new commandline interface. The apache CLI module has one dependency: commons-lang. And commons-lang has no dependencies at all. Is that acceptable? Re your question on whether it is acceptable to require java1.4 for building apache projects: I will ask soon. It's been a busy old week.. Regards, Simon |
From: <lak...@t-...> - 2004-06-10 05:51:27
|
Sending on behalf of Vincent: Hi Lars, I have progressed on the Maven plugin for Clirr. I am actually ready to commit a first version. However when I try running it on Cactus I get the following error, which seems to come from clirr-framework: [clirr] INFO: Added org.apache.cactus.TestAll [clirr] INFO: Added org.apache.cactus.TestNoNameTestCase [clirr] INFO: Added org.apache.cactus.TestServletURL [clirr] INFO: Added org.apache.cactus.TestShareAll [clirr] INFO: Added org.apache.cactus.TestWebRequest [clirr] INFO: Added org.apache.cactus.extension.jetty.TestJettyTestSetup [clirr] INFO: Added org.apache.cactus.extension.jetty.TestJettyTestSetup$SampleTestCase [clirr] INFO: Added org.apache.cactus.internal.AbstractTestAbstractCactusTestCase [clirr] INFO: Added org.apache.cactus.internal.TestAbstractCactusTestCase [clirr] INFO: Added org.apache.cactus.internal.TestWebTestResult [clirr] INFO: Added org.apache.cactus.internal.client.TestWebTestResultParser [clirr] INFO: Added org.apache.cactus.internal.configuration.DefaultFilterConfiguration [clirr] INFO: Added org.apache.cactus.internal.configuration.DefaultJspConfiguration [clirr] INFO: Added org.apache.cactus.internal.configuration.DefaultServletConfiguration [clirr] INFO: Added org.apache.cactus.internal.server.TestServletUtil [clirr] INFO: Added org.apache.cactus.internal.server.runner.TestXMLFormatter [clirr] INFO: Added org.apache.cactus.internal.util.TestCookieUtil [clirr] INFO: Added org.apache.cactus.internal.util.TestIoUtil [clirr] INFO: Added org.apache.cactus.internal.util.TestStringUtil [clirr] INFO: Added org.apache.cactus.internal.util.TestTestCaseImplementChecker [clirr] INFO: Added org.apache.cactus.internal.util.TestUniqueGenerator [clirr] INFO: Added org.apache.cactus.mock.MockHttpURLConnection [clirr] INFO: Added org.apache.cactus.server.AbstractHttpServletRequestWrapper23 [clirr] INFO: Added org.apache.cactus.server.AbstractPageContextWrapper23 [clirr] INFO: Added org.apache.cactus.server.runner.TestServletTestRunner java.lang.ClassNotFoundException: junit.runner.BaseTestRunner not found. java.lang.ClassNotFoundException: junit.runner.BaseTestRunner not found. java.lang.ClassNotFoundException: junit.runner.BaseTestRunner not found. java.lang.ClassNotFoundException: junit.runner.BaseTestRunner not found. java.lang.ClassNotFoundException: junit.framework.TestCase not found. java.lang.ClassNotFoundException: junit.framework.TestCase not found. java.lang.ClassNotFoundException: junit.framework.TestCase not found. java.lang.ClassNotFoundException: junit.framework.TestCase not found. java.lang.ClassNotFoundException: javax.servlet.Filter not found. BUILD FAILED java.lang.NullPointerException at org.apache.bcel.classfile.JavaClass.getAllInterfaces(JavaClass.java:808) at net.sf.clirr.checks.InterfaceSetCheck.check(InterfaceSetCheck.java:53) at net.sf.clirr.Checker.runClassChecks(Checker.java:278) at net.sf.clirr.Checker.reportDiffs(Checker.java:259) at net.sf.clirr.Checker.reportDiffs(Checker.java:144) at net.sf.clirr.ant.AntTask.execute(AntTask.java:245) at org.apache.tools.ant.Task.perform(Task.java:341) at org.apache.commons.jelly.tags.ant.AntTag.doTag(AntTag.java:232) at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:279) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:135) at org.apache.maven.jelly.tags.werkz.MavenGoalTag.runBodyTag(MavenGoalTag.java:79) at org.apache.maven.jelly.tags.werkz.MavenGoalTag$MavenGoalAction.performAction(MavenGoalTag .java:110) at com.werken.werkz.Goal.fire(Goal.java:639) at com.werken.werkz.Goal.attain(Goal.java:575) at com.werken.werkz.Goal.attainPrecursors(Goal.java:488) at com.werken.werkz.Goal.attain(Goal.java:573) at com.werken.werkz.WerkzProject.attainGoal(WerkzProject.java:193) at org.apache.maven.plugin.PluginManager.attainGoals(PluginManager.java:610) Any idea? Thanks -Vincent |
From: <lak...@t-...> - 2004-06-10 05:48:21
|
Sending on behalf of Vincent > -----Original Message----- > From: cli...@li... [mailto:clirr-devel- > ad...@li...] On Behalf Of Lars Kühne > Sent: 09 June 2004 07:28 > To: cli...@li... > Subject: Re: [Clirr-devel] CVS: clirr/src/java/net/sf/clirr/checks > MethodSetCheck.java,1.6,1.7 > > Simon Kitching wrote: > > >On Wed, 2004-06-09 at 04:30, Lars Kühne wrote: > > > > > >>Simon, > >> > >>could you please add the new feature to xdocs/changes.xml, so everyone > >>knows the differences between each release? > >> > >> > > > >Yes I can do. > > > > > > > > Thanks. > > >But ..umm.. doesn't clirr generate a nice report that tells us that? > > > >This was the initial reason I wanted a clirr-like tool; I was preparing > >release notes for Digester 1.6, and wanted to know what APIs had > >changed. > > > > > > > > Thats correct, Clirr tells you the API differences. When you are working > on a project that has the goal of producing an API (like > commons-collections) that might be sufficient. But for applications > (like Clirr), users are interested in a much more high level report. > > I think it's the same with JIRA and the Changelog it produces: Nice for > developers, but not suitable for end users. > > Everytime I create a release of our commercial software, I have to > create an end-user change log manually. Our customers don't want to know > that we have introduced ValueTypes, and optimized our caching algorithm > (that would be the Jira issues). In the releasenotes I would write > "performance has been improved dramatically", collapsing several jira > issues into one high level entry in our release notes. > > My goal with changes.xml is to tell clirr users what has changed from > their perspective - given they don't know the implementation, they just > want to use the tool. Exactly! That was exactly my goal when I created the Maven changes plugin :-) Glad someone has understood this! In maven land several person keep adding "developer" changes to changes.xml that are not interesting for end users (like "refactoring of such and such thing"). -Vincent |
From: <lak...@t-...> - 2004-06-10 05:41:41
|
Vincent is experiencing technical difficulties sending mails to the list, forwarding private emails... |
From: <lak...@t-...> - 2004-06-09 06:15:17
|
Simon Kitching wrote: >Hi, > >I notice that Checker.java is throwing ant.BuildException in places. > > > That's a bug, the core should have no dependency on any class of a particular frontend. >I think it would be nice to remove this dependency by having Checker >methods throw a CheckerException class, and have the AntTask class catch >these and throw BuildException. > > > Yes, that would be much better. >In particular, the net.sf.clirr.cmdline.CheckRunner class I have just >written ends up having to catch ant.BuildException if this is not done, >which feels wrong. > >I also see that clirr classes tend to throw "unchecked" exceptions >(subclasses of RuntimeException) rather than checked exceptions. >Examples: ant.BuildException, IllegalArgumentException. Is this a >deliberate design philosophy, or just something that happened? > > > IllegalArgument is deliberate - the caller is doing something wrong and the only way we can handle it is by throwing an Exception. However, correct callers don't want to mess around with exception handling on every call in this case, so we throw an unchecked exception. Throwing a BuildException is not deliberate. For example, the client (in this case the Ant task implementation) cannot prevent IOExceptions while we are reading the jars. So the client should really be prepared to handle IO errors (which would be signalled by a CheckerException, not IOException). This leads to the problem of Exception chaining. When I catch the CheckerException, I want to see that IOException in the stack trace ("caused by ..."). I'm seeing more and more examples where JDK 1.4 would be really helpful (regexps for ClassSelector would be another one). I am aware that there are ways to solve these issues by using commons-lang, ORO, etc. - but I'd really like to avoid having all these dependencies around and simply require 1.4. Simon, could you please find out whether it's OK to use JDK 1.4 during the build process of our main Apache target projects (commons-*, maybe log4j)? >I am aware that many languages favour unchecked exceptions (.NET, c++) >but when working in Java I tend to prefer checked exceptions, because it >is the "norm" for Java code if nothing else. > > > Yes, I'm not in the "unchecked exceptions everywhere" camp either - I dont have any hard rules, but I decide on an individual basis. >So: >* is framework.CheckerException a reasonable name/package? > > Yes. >* is it ok to make it a checked exception (subclass Exception) > rather than an unchecked one (subclass RuntimeException)? > > Yes. >* is net.sf.clirr.cmdline.CheckRunner a good name/package for the > command-line interface? > > I had net.sf.clirr.cmdline.Clirr in mind. Choose whatever you like best. Cheers, Lars |
From: <lak...@t-...> - 2004-06-09 05:26:47
|
Simon Kitching wrote: >On Wed, 2004-06-09 at 04:30, Lars Kühne wrote: > > >>Simon, >> >>could you please add the new feature to xdocs/changes.xml, so everyone >>knows the differences between each release? >> >> > >Yes I can do. > > > Thanks. >But ..umm.. doesn't clirr generate a nice report that tells us that? > >This was the initial reason I wanted a clirr-like tool; I was preparing >release notes for Digester 1.6, and wanted to know what APIs had >changed. > > > Thats correct, Clirr tells you the API differences. When you are working on a project that has the goal of producing an API (like commons-collections) that might be sufficient. But for applications (like Clirr), users are interested in a much more high level report. I think it's the same with JIRA and the Changelog it produces: Nice for developers, but not suitable for end users. Everytime I create a release of our commercial software, I have to create an end-user change log manually. Our customers don't want to know that we have introduced ValueTypes, and optimized our caching algorithm (that would be the Jira issues). In the releasenotes I would write "performance has been improved dramatically", collapsing several jira issues into one high level entry in our release notes. My goal with changes.xml is to tell clirr users what has changed from their perspective - given they don't know the implementation, they just want to use the tool. Cheers, Lars |
From: Simon K. <si...@ec...> - 2004-06-09 03:00:37
|
Hi, I notice that Checker.java is throwing ant.BuildException in places. I think it would be nice to remove this dependency by having Checker methods throw a CheckerException class, and have the AntTask class catch these and throw BuildException. In particular, the net.sf.clirr.cmdline.CheckRunner class I have just written ends up having to catch ant.BuildException if this is not done, which feels wrong. I also see that clirr classes tend to throw "unchecked" exceptions (subclasses of RuntimeException) rather than checked exceptions. Examples: ant.BuildException, IllegalArgumentException. Is this a deliberate design philosophy, or just something that happened? I am aware that many languages favour unchecked exceptions (.NET, c++) but when working in Java I tend to prefer checked exceptions, because it is the "norm" for Java code if nothing else. So: * is framework.CheckerException a reasonable name/package? * is it ok to make it a checked exception (subclass Exception) rather than an unchecked one (subclass RuntimeException)? * is net.sf.clirr.cmdline.CheckRunner a good name/package for the command-line interface? Thanks, Simon |
From: Simon K. <s_k...@us...> - 2004-06-08 22:58:21
|
Update of /cvsroot/clirr/clirr/xdocs In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7628 Modified Files: changes.xml Log Message: Note addition of method deprecation/undeprecation reporting. Index: changes.xml =================================================================== RCS file: /cvsroot/clirr/clirr/xdocs/changes.xml,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- changes.xml 6 Jun 2004 09:00:23 -0000 1.9 +++ changes.xml 8 Jun 2004 22:58:02 -0000 1.10 @@ -19,6 +19,9 @@ XML formatter did not write method and field attributes correctly. </action> + <action dev="s_kitching" type="add"> + Report on methods being deprecated or undeprecated. + </action> </release> <release version="0.3" date="2004-05-23"> |
From: Simon K. <si...@ec...> - 2004-06-08 22:08:27
|
On Wed, 2004-06-09 at 04:30, Lars K=FChne wrote: > Simon, >=20 > could you please add the new feature to xdocs/changes.xml, so everyone=20 > knows the differences between each release? Yes I can do. But ..umm.. doesn't clirr generate a nice report that tells us that? This was the initial reason I wanted a clirr-like tool; I was preparing release notes for Digester 1.6, and wanted to know what APIs had changed. Regards, Simon |
From: SourceForge.net <no...@so...> - 2004-06-08 20:05:40
|
Feature Requests item #961229, was opened at 2004-05-27 00:54 Message generated for change (Comment added) made by lkuehne You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=590802&aid=961229&group_id=89627 Category: None Group: None Status: Open Resolution: None Priority: 5 Submitted By: Stephen Colebourne (scolebourne) Assigned to: Lars Kühne (lkuehne) Summary: Error messages raised on a class that hasn't changed Initial Comment: Not sure why, but these errors seem wrong as the code hasn't changed. Commons collections 3.0-HEAD ERROR: Method 'public java.lang.Object next()' has been removed in org.apache.commons.collections.map.AbstractLinkedMap$ LinkIterator ERROR: Method 'public java.lang.Object previous()' has been removed in org.apache.commons.collections.map.AbstractLinkedMap$ LinkIterator ERROR: Method 'public java.lang.Object next()' has been removed in org.apache.commons.collections.map.AbstractHashedMap $HashIterator ---------------------------------------------------------------------- >Comment By: Lars Kühne (lkuehne) Date: 2004-06-08 22:05 Message: Logged In: YES user_id=401384 I think I know what the problem is now: > javap -classpath commons-collections-3.0.jar -c 'org.apache.commons.collections.map.AbstractLinkedMap$LinkIterator' | grep public public abstract class org.apache.commons.collections.map.AbstractLinkedMap$LinkIterator extends java.lang.Object implements org.apache.commons.collections.OrderedIterator,org.apache.commons.collections.ResettableIterator{ public boolean hasNext(); public boolean hasPrevious(); public void remove(); public void reset(); public java.lang.String toString(); public abstract java.lang.Object previous(); public abstract java.lang.Object next(); > javap -classpath commons-collections.jar -c 'org.apache.commons.collections.map.AbstractLinkedMap$LinkIterator' | grep public public abstract class org.apache.commons.collections.map.AbstractLinkedMap$LinkIterator extends java.lang.Object implements org.apache.commons.collections.OrderedIterator,org.apache.commons.collections.ResettableIterator{ public boolean hasNext(); public boolean hasPrevious(); public void remove(); public void reset(); public java.lang.String toString(); Clirr is right, those methods *have* been removed (different compiler?), but removal of abstract methods should not lead to an error message if that method is specified by a superclass / interface. ---------------------------------------------------------------------- Comment By: Lars Kühne (lkuehne) Date: 2004-06-06 13:56 Message: Logged In: YES user_id=401384 Forget my comment on return type, I was looking at the 'next' field, not the method... ---------------------------------------------------------------------- Comment By: Lars Kühne (lkuehne) Date: 2004-06-06 10:44 Message: Logged In: YES user_id=401384 OK, thanks - I can reproduce this now. What's even more puzzeling is that the reported return type is incorrect, judging from the javadocs AbstractHashedMap$HashIterator.next() returns AbstractHashedMap.HashEntry, not Object. Will investigate... ---------------------------------------------------------------------- Comment By: Stephen Colebourne (scolebourne) Date: 2004-06-04 00:49 Message: Logged In: YES user_id=408725 HEAD file too big to attach. Try: http://cvs.apache.org/builds/jakarta- commons/nightly/commons-collections/ Javadoc on left (3.0 and HEAD) http://jakarta.apache.org/commons/collections/ ---------------------------------------------------------------------- Comment By: Stephen Colebourne (scolebourne) Date: 2004-06-04 00:48 Message: Logged In: YES user_id=408725 HEAD file too big to attach. Try: http://cvs.apache.org/builds/jakarta- commons/nightly/commons-collections/ Javadoc on left (3.0 and HEAD) http://jakarta.apache.org/commons/collections/ ---------------------------------------------------------------------- Comment By: Stephen Colebourne (scolebourne) Date: 2004-06-04 00:46 Message: Logged In: YES user_id=408725 Collections 3.0 vs CVS HEAD jar (attached) ---------------------------------------------------------------------- Comment By: Lars Kühne (lkuehne) Date: 2004-06-02 10:40 Message: Logged In: YES user_id=401384 Which versions of commons-collections are you testing against, and where can I find precompiled binaries and the javadoc for those versions? ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=590802&aid=961229&group_id=89627 |
From: <lak...@t-...> - 2004-06-08 16:28:41
|
Simon, could you please add the new feature to xdocs/changes.xml, so everyone knows the differences between each release? Thanks, Lars Simon Kitching wrote: >Update of /cvsroot/clirr/clirr/src/java/net/sf/clirr/checks >In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7585 > >Modified Files: > MethodSetCheck.java >Log Message: >Add code to report on deprecated/undeprecated methods. > > |
From: Simon K. <s_k...@us...> - 2004-06-08 09:12:49
|
Update of /cvsroot/clirr/clirr/src/testinput/testlib-v2/testlib In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv8071/testlib-v2/testlib Modified Files: MethodsChange.java Log Message: Testdata for deprecated/undeprecated method tests. Index: MethodsChange.java =================================================================== RCS file: /cvsroot/clirr/clirr/src/testinput/testlib-v2/testlib/MethodsChange.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- MethodsChange.java 18 Jan 2004 12:01:58 -0000 1.1 +++ MethodsChange.java 8 Jun 2004 09:12:40 -0000 1.2 @@ -92,4 +92,18 @@ { throw new Exception(); } + + /** + * @deprecated this is a bad method. + */ + public void becomesDeprecated() + { + } + + /** + * This method was previously deprecated. + */ + public void becomesUndeprecated() + { + } } |
From: Simon K. <s_k...@us...> - 2004-06-08 09:12:48
|
Update of /cvsroot/clirr/clirr/src/testinput/testlib-v1/testlib In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv8071/testlib-v1/testlib Modified Files: MethodsChange.java Log Message: Testdata for deprecated/undeprecated method tests. Index: MethodsChange.java =================================================================== RCS file: /cvsroot/clirr/clirr/src/testinput/testlib-v1/testlib/MethodsChange.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- MethodsChange.java 18 Jan 2004 12:01:58 -0000 1.1 +++ MethodsChange.java 8 Jun 2004 09:12:39 -0000 1.2 @@ -93,4 +93,18 @@ public void throwNoException() { } + + /** This method will be deprecated in the later version. */ + public void becomesDeprecated() + { + } + + /** + * This method will be "undeprecated" in the later version. + * + * @deprecated this is a bad method. + */ + public void becomesUndeprecated() + { + } } |
From: Simon K. <s_k...@us...> - 2004-06-08 09:11:43
|
Update of /cvsroot/clirr/clirr/src/test/net/sf/clirr/checks In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7911 Modified Files: MethodSetCheckTest.java Log Message: Unit tests for method deprecation/undeprecation Index: MethodSetCheckTest.java =================================================================== RCS file: /cvsroot/clirr/clirr/src/test/net/sf/clirr/checks/MethodSetCheckTest.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- MethodSetCheckTest.java 5 Jun 2004 16:26:14 -0000 1.4 +++ MethodSetCheckTest.java 8 Jun 2004 09:11:33 -0000 1.5 @@ -32,8 +32,6 @@ // Constructor changes new ApiDifference("Parameter 1 of 'protected MethodsChange(int)' has changed it's type to java.lang.Integer in testlib.MethodsChange", Severity.ERROR, "testlib.MethodsChange", "protected MethodsChange(int)", null), -// new ApiDifference("Constructor 'protected MethodsChange(int, boolean)' has been added in testlib.MethodsChange", -// Severity.INFO, "testlib.MethodsChange", "public MethodsChange(int, boolean)", null), // return type changes new ApiDifference("Return type of Method 'public java.lang.Number getPrivAsNumber()' has been changed to java.lang.Integer in testlib.MethodsChange", @@ -54,7 +52,12 @@ new ApiDifference("Parameter 1 of 'public void changeParamType(java.lang.String)' has changed it's type to java.lang.Integer in testlib.MethodsChange", Severity.ERROR, "testlib.MethodsChange", "public void changeParamType(java.lang.String)", null), - + // deprecation changes + new ApiDifference("Method 'public void becomesDeprecated()' has been deprecated in testlib.MethodsChange", + Severity.INFO, "testlib.MethodsChange", "public void becomesDeprecated()", null), + new ApiDifference("Method 'public void becomesUndeprecated()' is no longer deprecated in testlib.MethodsChange", + Severity.INFO, "testlib.MethodsChange", "public void becomesUndeprecated()", null), + // declared exceptions // TODO }; |
From: Simon K. <s_k...@us...> - 2004-06-08 09:10:12
|
Update of /cvsroot/clirr/clirr/src/java/net/sf/clirr/checks In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7585 Modified Files: MethodSetCheck.java Log Message: Add code to report on deprecated/undeprecated methods. Index: MethodSetCheck.java =================================================================== RCS file: /cvsroot/clirr/clirr/src/java/net/sf/clirr/checks/MethodSetCheck.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- MethodSetCheck.java 5 Jun 2004 16:26:14 -0000 1.6 +++ MethodSetCheck.java 8 Jun 2004 09:10:00 -0000 1.7 @@ -27,6 +27,7 @@ import net.sf.clirr.framework.ClassChangeCheck; import org.apache.bcel.classfile.JavaClass; import org.apache.bcel.classfile.Method; +import org.apache.bcel.classfile.Attribute; import org.apache.bcel.generic.Type; import java.util.ArrayList; @@ -296,6 +297,7 @@ checkParameterTypes(compatBaseline, baselineMethod, currentMethod); checkReturnType(compatBaseline, baselineMethod, currentMethod); checkDeclaredExceptions(compatBaseline, baselineMethod, currentMethod); + checkDeprecated(compatBaseline, baselineMethod, currentMethod); } private void checkParameterTypes(JavaClass compatBaseline, Method baselineMethod, Method currentMethod) @@ -351,6 +353,25 @@ // TODO } + private void checkDeprecated(JavaClass compatBaseline, Method baselineMethod, Method currentMethod) + { + boolean bIsDeprecated = isDeprecated(baselineMethod); + boolean cIsDeprecated = isDeprecated(currentMethod); + + if (bIsDeprecated && !cIsDeprecated) + { + fireDiff( + "Method '" + getMethodId(compatBaseline, baselineMethod) + "' is no longer deprecated", + Severity.INFO, compatBaseline, baselineMethod); + } + else if (!bIsDeprecated && cIsDeprecated) + { + fireDiff( + "Method '" + getMethodId(compatBaseline, baselineMethod) + "' has been deprecated", + Severity.INFO, compatBaseline, baselineMethod); + } + } + /** * Creates a human readable String that is similar to the method signature * and identifies the method within a class. @@ -410,4 +431,17 @@ } + private boolean isDeprecated(Method method) + { + Attribute[] attrs = method.getAttributes(); + for(int i=0; i<attrs.length; ++i) + { + if (attrs[i] instanceof org.apache.bcel.classfile.Deprecated) + { + return true; + } + } + + return false; + } } |
From: Simon K. <si...@ec...> - 2004-06-08 00:24:06
|
On Tue, 2004-06-08 at 06:57, Lars K=FChne wrote: > Works fine for me: >=20 > [~/tmp]: cvs -d:pserver:ano...@cv...:/cvsroot/clirr co= =20 > clirr > ? clirr/target > cvs checkout: Updating clirr > U clirr/.cvsignore > U clirr/LICENSE.txt > U clirr/maven.xml > [...] >=20 > I assume this has been a temporary problem? Yep, it's working again today. Must have been the alignment of the planets or something.... Cheers, Simon |
From: <lak...@t-...> - 2004-06-07 18:56:40
|
Works fine for me: [~/tmp]: cvs -d:pserver:ano...@cv...:/cvsroot/clirr co clirr ? clirr/target cvs checkout: Updating clirr U clirr/.cvsignore U clirr/LICENSE.txt U clirr/maven.xml [...] I assume this has been a temporary problem? Simon Kitching wrote: >Hi, > >I just tried to update my checkout of the clirr source code using cvs. >However I keep getting this message: > >simon@pcsimon:~/clirr$ cvs >-d:pserver:ano...@cv...:/cvsroot/clirr co clirr >can't create temporary directory /tmp/cvs-serv6132 >Permission denied > >The problem doesn't appear to be at my end. I can access a number of >other cvs repositories fine, including repos for other projects at >sourceforge. > >I think that the message about "can't create temporary directory" is >actually being generated by the CVS *server* at sourceforge. Maybe the >clirr user doesn't have the right group for accessing the /tmp dir on >cvs.sourceforge.net or something bizarre like that? Everything was >working fine 48 hours ago... > >Cheers, > >Simon > > > > |