From: <dal...@us...> - 2009-09-29 23:14:02
|
Revision: 16249 http://jedit.svn.sourceforge.net/jedit/?rev=16249&view=rev Author: daleanson Date: 2009-09-29 23:13:51 +0000 (Tue, 29 Sep 2009) Log Message: ----------- optimizing the Log command, not quite done. Modified Paths: -------------- plugins/SVNPlugin/trunk/src/ise/plugin/svn/command/Log.java Modified: plugins/SVNPlugin/trunk/src/ise/plugin/svn/command/Log.java =================================================================== --- plugins/SVNPlugin/trunk/src/ise/plugin/svn/command/Log.java 2009-09-29 20:43:41 UTC (rev 16248) +++ plugins/SVNPlugin/trunk/src/ise/plugin/svn/command/Log.java 2009-09-29 23:13:51 UTC (rev 16249) @@ -40,20 +40,18 @@ import org.tmatesoft.svn.core.wc.ISVNOptions; import org.tmatesoft.svn.core.wc.SVNClientManager; import org.tmatesoft.svn.core.wc.SVNWCUtil; -import org.tmatesoft.svn.core.wc.SVNWCClient; -import org.tmatesoft.svn.core.wc.SVNInfo; -import org.tmatesoft.svn.core.auth.BasicAuthenticationManager; import org.tmatesoft.svn.core.SVNException; import ise.plugin.svn.data.LogData; import ise.plugin.svn.data.LogResults; -import ise.plugin.svn.library.Logger; public class Log { private LogResults results = new LogResults(); + + // <file path, list of log entries for the file> private TreeMap < String, List < SVNLogEntry >> entries = new TreeMap < String, List < SVNLogEntry >> (); private PrintStream out = null; @@ -64,8 +62,8 @@ */ public void doLog( LogData data ) throws CommandInitializationException, SVNException { SVNKit.setupLibrary(); - + // validate data values if ( data.getPaths() == null ) { return ; // nothing to do @@ -87,101 +85,78 @@ // check for file existence? } } + + // pre-populate the 'entries' tree map + for (String path : data.getPaths()) { + entries.put(path, new ArrayList<SVNLogEntry>()); + } // use default svn config options ISVNOptions options = SVNWCUtil.createDefaultOptions( true ); - + // use the svnkit client manager - System.out.println("+++++ Log.java, username = " + data.getUsername() + ", password = " + data.getDecryptedPassword()); - SVNClientManager clientManager = SVNClientManager.newInstance( options, SVNWCUtil.createDefaultAuthenticationManager(data.getUsername(), data.getDecryptedPassword()) ); - - - // get a commit client + SVNClientManager clientManager = SVNClientManager.newInstance( options, SVNWCUtil.createDefaultAuthenticationManager( data.getUsername(), data.getDecryptedPassword() ) ); + + + // get log client SVNLogClient client = clientManager.getLogClient(); - SVNWCClient wc_client = clientManager.getWCClient(); - - - // set an event handler so that messages go to the commit data streams for display + + + // set an event handler so that messages go to the streams for display client.setEventHandler( new SVNCommandEventProcessor( data.getOut(), data.getErr(), false ) ); - - + + out = data.getOut(); if ( data.pathsAreURLs() ) { - for (String path : data.getPaths()) { - SVNURL svnurl = SVNURL.parseURIDecoded(path); - LogHandler handler = new LogHandler( path ); - // files for logs, paths, peg revision, start revision, - // end revision, stop on copy, report paths, number of entries, handler - // TODO: check if there is a new method that will take multiple urls to avoid looping - + + + + for ( String path : data.getPaths() ) { + System.out.println("+++++ path: " + path); + SVNURL svnurl = SVNURL.parseURIDecoded( path ); + System.out.println("+++++ svnurl: " + svnurl); + System.out.println("+++++ tail path removed: " + svnurl.removePathTail()); + LogHandler handler = new LogHandler(); + // TODO: check if there is a new method that will take multiple urls to avoid looping -- + // there is, need to use it: + // doLog(SVNURL url, String[] paths, SVNRevision pegRevision, SVNRevision startRevision, + // SVNRevision endRevision, boolean stopOnCopy, boolean discoverChangedPaths, long limit, ISVNLogEntryHandler handler) client.doLog( svnurl, null, data.getPegRevision(), data.getStartRevision(), - data.getEndRevision(), data.getStopOnCopy(), data.getShowPaths(), data.getMaxLogs(), handler ); - - entries.put( handler.getPath(), handler.getEntries() ); - + data.getEndRevision(), data.getStopOnCopy(), data.getShowPaths(), data.getMaxLogs(), handler ); } } else { - for ( File file : localPaths ) { - // this feels like a kludge, I shouldn't have to do a substring - // call to figure out the path of the file - LogHandler handler = new LogHandler( file ); - SVNInfo info = wc_client.doInfo(file, SVNRevision.WORKING); - results.setInfo(info); - String rep_url_string = info.getRepositoryRootURL().toString(); - String file_url_string = info.getURL().toString(); - String path = file_url_string.substring(rep_url_string.length()); - SVNURL rep_url = SVNURL.parseURIEncoded(rep_url_string); - String[] rep_paths = new String[]{path}; - // I should also be able to set the peg revision, but it seems that - // using anything beside 0 or UNDEFINED fails. - client.doLog( rep_url, rep_paths, data.getPegRevision(), data.getStartRevision(), + // DONE: there is a new method that will take an array of Files, + // should use that one instead to avoid the loop. + LogHandler handler = new LogHandler(); + // doLog(File[] paths, SVNRevision pegRevision, SVNRevision startRevision, + // SVNRevision endRevision, boolean stopOnCopy, boolean discoverChangedPaths, long limit, ISVNLogEntryHandler handler) + client.doLog( localPaths, data.getPegRevision(), data.getStartRevision(), data.getEndRevision(), data.getStopOnCopy(), data.getShowPaths(), data.getMaxLogs(), handler ); - entries.put( handler.getPath(), handler.getEntries() ); - } } - results.setEntries(entries); + results.setEntries( entries ); out.flush(); out.close(); - System.out.println("+++++ Log.java, done"); } public class LogHandler implements ISVNLogEntryHandler { - private String path = ""; - private List<SVNLogEntry> logEntries = null; - - public LogHandler( File f ) { - path = f.toString(); - } - - public LogHandler( String p ) { - path = p; - } - public void handleLogEntry( SVNLogEntry logEntry ) { - if ( logEntries == null ) { - logEntries = new ArrayList<SVNLogEntry>(); + Map changedPaths = logEntry.getChangedPaths(); + Set entryPaths = changedPaths.keySet(); // entryPaths contains Strings of paths + for(String path : entries.keySet()) { + for (Object ep : entryPaths) { + String entryPath = (String)ep; + if (path.endsWith(entryPath)) { + entries.get(path).add(logEntry); + Log.this.printLogEntry(path, logEntry); + } + } } - logEntries.add( logEntry ); - Log.this.printLogEntry( path, logEntry ); } - - public String getPath() { - return path; - } - - public List<SVNLogEntry> getEntries() { - if ( logEntries == null ) { - logEntries = new ArrayList<SVNLogEntry>(); - SVNLogEntry logEntry = new SVNLogEntry(null, 0, "---", null, "No entries found."); - logEntries.add(logEntry); - } - return logEntries; - } } /** @@ -192,8 +167,9 @@ } public void printLogEntry( String path, SVNLogEntry logEntry ) { - if ( out == null ) + if ( out == null ) { return ; + } out.println( "path: " + path ); out.println( "revision: " + logEntry.getRevision() ); @@ -236,35 +212,35 @@ } } - public static void main (String[] args) { + public static void main ( String[] args ) { // for testing LogData data = new LogData(); - data.setUsername("daleanson"); - data.setPassword(""); + data.setUsername( "daleanson" ); + data.setPassword( "" ); List<String> paths = new ArrayList<String>(); - paths.add("/home/danson/src/plugins/SVNPlugin/src/ise/plugin/svn/command/Log.java"); - data.setPaths(paths); - data.setOut(new ise.plugin.svn.io.ConsolePrintStream(new ise.plugin.svn.io.LogOutputStream(null))); + paths.add( "/home/danson/src/plugins/SVNPlugin/src/ise/plugin/svn/command/Log.java" ); + data.setPaths( paths ); + data.setOut( new ise.plugin.svn.io.ConsolePrintStream( new ise.plugin.svn.io.LogOutputStream( null ) ) ); //long start_rev = 9795L; //long end_rev = 9810L; java.util.Calendar cal = java.util.Calendar.getInstance(); - cal.set(2007, 5, 1); + cal.set( 2007, 5, 1 ); //SVNRevision start = SVNRevision.parse(String.valueOf(start_rev)); - SVNRevision start = SVNRevision.create(cal.getTime()); - cal.set(2007, 6, 1); + SVNRevision start = SVNRevision.create( cal.getTime() ); + cal.set( 2007, 6, 1 ); //SVNRevision end = SVNRevision.parse(String.valueOf(end_rev)); - SVNRevision end = SVNRevision.create(cal.getTime()); - data.setStartRevision(start); - data.setEndRevision(end); + SVNRevision end = SVNRevision.create( cal.getTime() ); + data.setStartRevision( start ); + data.setEndRevision( end ); Log log = new Log(); try { org.tmatesoft.svn.core.internal.io.dav.DAVRepositoryFactory.setup(); org.tmatesoft.svn.core.internal.io.svn.SVNRepositoryFactoryImpl.setup(); org.tmatesoft.svn.core.internal.io.fs.FSRepositoryFactory.setup(); - log.doLog(data); + log.doLog( data ); } - catch(Exception e) { + catch ( Exception e ) { e.printStackTrace(); } } -} +} \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dal...@us...> - 2009-09-30 20:51:33
|
Revision: 16258 http://jedit.svn.sourceforge.net/jedit/?rev=16258&view=rev Author: daleanson Date: 2009-09-30 20:51:24 +0000 (Wed, 30 Sep 2009) Log Message: ----------- Optimization of Log, using new 'doLog' method to avoid looping and eliminate multiple calls to the svn server. Modified Paths: -------------- plugins/SVNPlugin/trunk/src/ise/plugin/svn/command/Log.java Modified: plugins/SVNPlugin/trunk/src/ise/plugin/svn/command/Log.java =================================================================== --- plugins/SVNPlugin/trunk/src/ise/plugin/svn/command/Log.java 2009-09-30 20:32:48 UTC (rev 16257) +++ plugins/SVNPlugin/trunk/src/ise/plugin/svn/command/Log.java 2009-09-30 20:51:24 UTC (rev 16258) @@ -35,6 +35,7 @@ import org.tmatesoft.svn.core.SVNLogEntry; import org.tmatesoft.svn.core.SVNLogEntryPath; import org.tmatesoft.svn.core.SVNURL; +import org.tmatesoft.svn.core.wc.SVNInfo; import org.tmatesoft.svn.core.wc.SVNLogClient; import org.tmatesoft.svn.core.wc.SVNRevision; import org.tmatesoft.svn.core.wc.ISVNOptions; @@ -85,10 +86,10 @@ // check for file existence? } } - + // pre-populate the 'entries' tree map - for (String path : data.getPaths()) { - entries.put(path, new ArrayList<SVNLogEntry>()); + for ( String path : data.getPaths() ) { + entries.put( path, new ArrayList<SVNLogEntry>() ); } // use default svn config options @@ -108,32 +109,34 @@ out = data.getOut(); - + LogHandler handler = new LogHandler(); + if ( data.pathsAreURLs() ) { - - - + SVNURL repositoryUrl = getRepositoryURL( data ); + if (repositoryUrl == null) { + out.println("ERROR: repository URL is null"); + out.flush(); + out.close(); + return; + } + int length = repositoryUrl.toString().length(); + Set<String> pathsToCheck = new HashSet<String>(); for ( String path : data.getPaths() ) { - System.out.println("+++++ path: " + path); - SVNURL svnurl = SVNURL.parseURIDecoded( path ); - System.out.println("+++++ svnurl: " + svnurl); - System.out.println("+++++ tail path removed: " + svnurl.removePathTail()); - LogHandler handler = new LogHandler(); - // TODO: check if there is a new method that will take multiple urls to avoid looping -- - // there is, need to use it: - // doLog(SVNURL url, String[] paths, SVNRevision pegRevision, SVNRevision startRevision, - // SVNRevision endRevision, boolean stopOnCopy, boolean discoverChangedPaths, long limit, ISVNLogEntryHandler handler) - client.doLog( svnurl, null, data.getPegRevision(), data.getStartRevision(), - data.getEndRevision(), data.getStopOnCopy(), data.getShowPaths(), data.getMaxLogs(), handler ); + String toCheck = path.substring(length); + pathsToCheck.add( toCheck ); } + + // svnkit method signature: + // doLog(SVNURL url, String[] paths, SVNRevision pegRevision, SVNRevision startRevision, + // SVNRevision endRevision, boolean stopOnCopy, boolean discoverChangedPaths, long limit, ISVNLogEntryHandler handler) + client.doLog( repositoryUrl, pathsToCheck.toArray(new String[0]), data.getPegRevision(), data.getStartRevision(), + data.getEndRevision(), data.getStopOnCopy(), data.getShowPaths(), data.getMaxLogs(), handler ); } else { - // DONE: there is a new method that will take an array of Files, - // should use that one instead to avoid the loop. - LogHandler handler = new LogHandler(); - // doLog(File[] paths, SVNRevision pegRevision, SVNRevision startRevision, - // SVNRevision endRevision, boolean stopOnCopy, boolean discoverChangedPaths, long limit, ISVNLogEntryHandler handler) + // svnkit method signature: + // doLog(File[] paths, SVNRevision pegRevision, SVNRevision startRevision, + // SVNRevision endRevision, boolean stopOnCopy, boolean discoverChangedPaths, long limit, ISVNLogEntryHandler handler) client.doLog( localPaths, data.getPegRevision(), data.getStartRevision(), data.getEndRevision(), data.getStopOnCopy(), data.getShowPaths(), data.getMaxLogs(), handler ); } @@ -147,12 +150,12 @@ public void handleLogEntry( SVNLogEntry logEntry ) { Map changedPaths = logEntry.getChangedPaths(); Set entryPaths = changedPaths.keySet(); // entryPaths contains Strings of paths - for(String path : entries.keySet()) { - for (Object ep : entryPaths) { - String entryPath = (String)ep; - if (path.endsWith(entryPath)) { - entries.get(path).add(logEntry); - Log.this.printLogEntry(path, logEntry); + for ( String path : entries.keySet() ) { + for ( Object ep : entryPaths ) { + String entryPath = ( String ) ep; + if ( path.endsWith( entryPath ) ) { + entries.get( path ).add( logEntry ); + Log.this.printLogEntry( path, logEntry ); } } } @@ -212,6 +215,21 @@ } } + private SVNURL getRepositoryURL( LogData data ) { + try { + Info info = new Info( ); + List<SVNInfo> infos = info.getInfo( data ); + if ( infos.size() == 0 ) { + return null; + } + SVNInfo svn_info = infos.get( 0 ); + return svn_info.getRepositoryRootURL(); + } + catch(Exception e) { + return null; + } + } + public static void main ( String[] args ) { // for testing LogData data = new LogData(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dal...@us...> - 2009-10-01 17:14:36
|
Revision: 16262 http://jedit.svn.sourceforge.net/jedit/?rev=16262&view=rev Author: daleanson Date: 2009-10-01 17:14:21 +0000 (Thu, 01 Oct 2009) Log Message: ----------- Fixed bug I introduced yesterday when updating Log to use new svnkit methods. I was not correctly matching up log entries with the local file, which caused the log display to be empty. Modified Paths: -------------- plugins/SVNPlugin/trunk/src/ise/plugin/svn/command/Log.java Modified: plugins/SVNPlugin/trunk/src/ise/plugin/svn/command/Log.java =================================================================== --- plugins/SVNPlugin/trunk/src/ise/plugin/svn/command/Log.java 2009-10-01 15:45:08 UTC (rev 16261) +++ plugins/SVNPlugin/trunk/src/ise/plugin/svn/command/Log.java 2009-10-01 17:14:21 UTC (rev 16262) @@ -88,8 +88,8 @@ } // pre-populate the 'entries' tree map - for ( String path : data.getPaths() ) { - entries.put( path, new ArrayList<SVNLogEntry>() ); + for ( String url : getURLs(data)) { + entries.put( url, new ArrayList<SVNLogEntry>() ); } // use default svn config options @@ -110,30 +110,30 @@ out = data.getOut(); LogHandler handler = new LogHandler(); - + if ( data.pathsAreURLs() ) { - + // get the repository url, then trim the paths to be relative to // the repository url so they can be passed all at once to the svn // server. SVNURL repositoryUrl = getRepositoryURL( data ); - if (repositoryUrl == null) { - out.println("ERROR: repository URL is null"); + if ( repositoryUrl == null ) { + out.println( "ERROR: repository URL is null" ); out.flush(); out.close(); - return; + return ; } int length = repositoryUrl.toString().length(); Set<String> pathsToCheck = new HashSet<String>(); for ( String path : data.getPaths() ) { - String toCheck = path.substring(length); + String toCheck = path.substring( length ); pathsToCheck.add( toCheck ); } - + // svnkit method signature: // doLog(SVNURL url, String[] paths, SVNRevision pegRevision, SVNRevision startRevision, // SVNRevision endRevision, boolean stopOnCopy, boolean discoverChangedPaths, long limit, ISVNLogEntryHandler handler) - client.doLog( repositoryUrl, pathsToCheck.toArray(new String[0]), data.getPegRevision(), data.getStartRevision(), + client.doLog( repositoryUrl, pathsToCheck.toArray( new String[ 0 ] ), data.getPegRevision(), data.getStartRevision(), data.getEndRevision(), data.getStopOnCopy(), data.getShowPaths(), data.getMaxLogs(), handler ); } else { @@ -152,10 +152,10 @@ public void handleLogEntry( SVNLogEntry logEntry ) { Map changedPaths = logEntry.getChangedPaths(); - Set entryPaths = changedPaths.keySet(); // entryPaths contains Strings of paths - for ( String path : entries.keySet() ) { + Set entryPaths = changedPaths.keySet(); // entryPaths contains Strings of paths relative to repository url + for ( String path : entries.keySet() ) { for ( Object ep : entryPaths ) { - String entryPath = ( String ) ep; + String entryPath = ( String ) ep; if ( path.endsWith( entryPath ) ) { entries.get( path ).add( logEntry ); Log.this.printLogEntry( path, logEntry ); @@ -228,11 +228,40 @@ SVNInfo svn_info = infos.get( 0 ); return svn_info.getRepositoryRootURL(); } - catch(Exception e) { + catch ( Exception e ) { return null; } } - + + private Set<String> getURLs( LogData data ) { + // might already have urls, so no need to check info on them + if ( data.pathsAreURLs() ) { + Set<String> urls = new HashSet<String>(); + for (String path : data.getPaths()) { + urls.add(path); + } + return urls; + } + + // for local files, need to get info to get repository url. This is + // quick since info is available locally. + try { + Info info = new Info( ); + List<SVNInfo> infos = info.getInfo( data ); + if ( infos.size() == 0 ) { + return null; + } + Set<String> urls = new HashSet<String>(); + for (SVNInfo svn_info : infos) { + urls.add(svn_info.getURL().toString()); + } + return urls; + } + catch ( Exception e ) { + return null; + } + } + public static void main ( String[] args ) { // for testing LogData data = new LogData(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dal...@us...> - 2009-10-07 15:04:16
|
Revision: 16290 http://jedit.svn.sourceforge.net/jedit/?rev=16290&view=rev Author: daleanson Date: 2009-10-07 15:03:58 +0000 (Wed, 07 Oct 2009) Log Message: ----------- added comments Modified Paths: -------------- plugins/SVNPlugin/trunk/src/ise/plugin/svn/command/Log.java Modified: plugins/SVNPlugin/trunk/src/ise/plugin/svn/command/Log.java =================================================================== --- plugins/SVNPlugin/trunk/src/ise/plugin/svn/command/Log.java 2009-10-07 14:18:51 UTC (rev 16289) +++ plugins/SVNPlugin/trunk/src/ise/plugin/svn/command/Log.java 2009-10-07 15:03:58 UTC (rev 16290) @@ -151,11 +151,17 @@ public class LogHandler implements ISVNLogEntryHandler { public void handleLogEntry( SVNLogEntry logEntry ) { + // match up log entries to the appropriate file. The 'entries' map + // uses the urls of the requested files as the key, and a list of + // log entries pertaining to that file. This handler method doesn't + // know which file is associated with this log entry, so I'm looping + // through the urls (keys) in 'entries' and checking if the changed + // paths in the logEntry matches with that url. Map changedPaths = logEntry.getChangedPaths(); Set entryPaths = changedPaths.keySet(); // entryPaths contains Strings of paths relative to repository url - for ( String path : entries.keySet() ) { + for ( String path : entries.keySet() ) { // path is a full repository url for ( Object ep : entryPaths ) { - String entryPath = ( String ) ep; + String entryPath = ( String ) ep; if ( path.endsWith( entryPath ) ) { entries.get( path ).add( logEntry ); Log.this.printLogEntry( path, logEntry ); @@ -232,17 +238,17 @@ return null; } } - + private Set<String> getURLs( LogData data ) { // might already have urls, so no need to check info on them if ( data.pathsAreURLs() ) { Set<String> urls = new HashSet<String>(); for (String path : data.getPaths()) { - urls.add(path); + urls.add(path); } return urls; } - + // for local files, need to get info to get repository url. This is // quick since info is available locally. try { @@ -261,7 +267,7 @@ return null; } } - + public static void main ( String[] args ) { // for testing LogData data = new LogData(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dal...@us...> - 2009-10-08 21:54:28
|
Revision: 16296 http://jedit.svn.sourceforge.net/jedit/?rev=16296&view=rev Author: daleanson Date: 2009-10-08 21:54:20 +0000 (Thu, 08 Oct 2009) Log Message: ----------- Went back to getting log messages for one file at a time. While it is possible to get messages for many files at once, it is impossible to match up which message goes with which file. Modified Paths: -------------- plugins/SVNPlugin/trunk/src/ise/plugin/svn/command/Log.java Modified: plugins/SVNPlugin/trunk/src/ise/plugin/svn/command/Log.java =================================================================== --- plugins/SVNPlugin/trunk/src/ise/plugin/svn/command/Log.java 2009-10-08 18:30:10 UTC (rev 16295) +++ plugins/SVNPlugin/trunk/src/ise/plugin/svn/command/Log.java 2009-10-08 21:54:20 UTC (rev 16296) @@ -87,11 +87,6 @@ } } - // pre-populate the 'entries' tree map - for ( String url : getURLs(data)) { - entries.put( url, new ArrayList<SVNLogEntry>() ); - } - // use default svn config options ISVNOptions options = SVNWCUtil.createDefaultOptions( true ); @@ -130,18 +125,49 @@ pathsToCheck.add( toCheck ); } - // svnkit method signature: - // doLog(SVNURL url, String[] paths, SVNRevision pegRevision, SVNRevision startRevision, - // SVNRevision endRevision, boolean stopOnCopy, boolean discoverChangedPaths, long limit, ISVNLogEntryHandler handler) - client.doLog( repositoryUrl, pathsToCheck.toArray( new String[ 0 ] ), data.getPegRevision(), data.getStartRevision(), - data.getEndRevision(), data.getStopOnCopy(), data.getShowPaths(), data.getMaxLogs(), handler ); + for ( String path : pathsToCheck ) { + out.println( "Log:" ); + out.println( "\trepository url: " + repositoryUrl ); + out.println( "\t path: " + path ); + out.println( "\t peg revision: " + data.getPegRevision() ); + out.println( "\tstart revision: " + data.getStartRevision() ); + out.println( "\t end revision: " + data.getEndRevision() ); + out.println( "\t stop on copy: " + data.getStopOnCopy() ); + out.println( "\t show paths: " + data.getShowPaths() ); + out.println( "\t max logs: " + data.getMaxLogs() ); + + handler.setPath( path ); + String[] pathToCheck = { path }; + + // Get log message for each path one at a time. While it is possible + // to get the log messages for several paths at once, it is impossible + // to tell which message goes with which file. + // doLog(SVNURL url, String[] paths, SVNRevision pegRevision, SVNRevision startRevision, + // SVNRevision endRevision, boolean stopOnCopy, boolean discoverChangedPaths, long limit, ISVNLogEntryHandler handler) + client.doLog( repositoryUrl, pathToCheck, data.getPegRevision(), data.getStartRevision(), + data.getEndRevision(), data.getStopOnCopy(), data.getShowPaths(), data.getMaxLogs(), handler ); + } } else { - // svnkit method signature: - // doLog(File[] paths, SVNRevision pegRevision, SVNRevision startRevision, - // SVNRevision endRevision, boolean stopOnCopy, boolean discoverChangedPaths, long limit, ISVNLogEntryHandler handler) - client.doLog( localPaths, data.getPegRevision(), data.getStartRevision(), - data.getEndRevision(), data.getStopOnCopy(), data.getShowPaths(), data.getMaxLogs(), handler ); + for ( File path : localPaths ) { + out.println( "Log:" ); + out.println( "\t file: " + path.getAbsolutePath() ); + out.println( "\t peg revision: " + data.getPegRevision() ); + out.println( "\tstart revision: " + data.getStartRevision() ); + out.println( "\t end revision: " + data.getEndRevision() ); + out.println( "\t stop on copy: " + data.getStopOnCopy() ); + out.println( "\t show paths: " + data.getShowPaths() ); + out.println( "\t max logs: " + data.getMaxLogs() ); + + handler.setPath( path.getAbsolutePath() ); + File[] pathToCheck = new File[] { path }; + + // svnkit method signature: + // doLog(File[] paths, SVNRevision pegRevision, SVNRevision startRevision, + // SVNRevision endRevision, boolean stopOnCopy, boolean discoverChangedPaths, long limit, ISVNLogEntryHandler handler) + client.doLog( pathToCheck, data.getPegRevision(), data.getStartRevision(), + data.getEndRevision(), data.getStopOnCopy(), data.getShowPaths(), data.getMaxLogs(), handler ); + } } results.setEntries( entries ); out.flush(); @@ -150,24 +176,19 @@ public class LogHandler implements ISVNLogEntryHandler { + private String path = null; + + public void setPath( String path ) { + this.path = path; + } + public void handleLogEntry( SVNLogEntry logEntry ) { - // match up log entries to the appropriate file. The 'entries' map - // uses the urls of the requested files as the key, and a list of - // log entries pertaining to that file. This handler method doesn't - // know which file is associated with this log entry, so I'm looping - // through the urls (keys) in 'entries' and checking if the changed - // paths in the logEntry matches with that url. - Map changedPaths = logEntry.getChangedPaths(); - Set entryPaths = changedPaths.keySet(); // entryPaths contains Strings of paths relative to repository url - for ( String path : entries.keySet() ) { // path is a full repository url - for ( Object ep : entryPaths ) { - String entryPath = ( String ) ep; - if ( path.endsWith( entryPath ) ) { - entries.get( path ).add( logEntry ); - Log.this.printLogEntry( path, logEntry ); - } - } + List<SVNLogEntry> messages = entries.get(path); + if (messages == null) { + messages = new ArrayList<SVNLogEntry>(); + entries.put(path, messages); } + messages.add( logEntry ); } } @@ -239,35 +260,6 @@ } } - private Set<String> getURLs( LogData data ) { - // might already have urls, so no need to check info on them - if ( data.pathsAreURLs() ) { - Set<String> urls = new HashSet<String>(); - for (String path : data.getPaths()) { - urls.add(path); - } - return urls; - } - - // for local files, need to get info to get repository url. This is - // quick since info is available locally. - try { - Info info = new Info( ); - List<SVNInfo> infos = info.getInfo( data ); - if ( infos.size() == 0 ) { - return null; - } - Set<String> urls = new HashSet<String>(); - for (SVNInfo svn_info : infos) { - urls.add(svn_info.getURL().toString()); - } - return urls; - } - catch ( Exception e ) { - return null; - } - } - public static void main ( String[] args ) { // for testing LogData data = new LogData(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |