Differences between revisions 5 and 6
Revision 5 as of 2008-09-05 18:01:56
Size: 1709
Editor: 194
Comment:
Revision 6 as of 2008-09-05 18:15:57
Size: 2204
Editor: 194
Comment:
Deletions are marked like this. Additions are marked like this.
Line 23: Line 23:

So, you simply call ''getDir()'' recursively storing properties on the way. But as it has already been mentioned, each call to ''getDir()'' results in one more request to the server. Instead you may use [[SVNRepository]]'s ''status()'' method to fetch all the properties with the following benefits:
 * you make only one single request to the server what gives lesser network overhead
 * no recursion at all

Status is an update-like operation, it follows the same concepts described in

SVNRepository.getStatus() vs. SVNRepository.getDir()

Here we will show how you can fetch properties from the repository recursively in a single request using SVNRepository. Many newbie users who come across the SVNRepository interface for the first time, decide to implement the task of recursive retrieving properties from a repository tree with the help of SVNRepository's getDir() method. To get properties recursively you'll have to call getDir() in recursion. It's not a wrong way, but consider the repository tree with multiple leaves (with hundreds or maybe thousands of them). For each directory leave getDir() sends a new request what leads to extremely slow performance.

Basically, what you do with getDir() is the following:

   1     public void fetchPropsFromRepository(SVNRepository repos, String path, long revision, 
   2                                          Map pathsToProps) throws SVNException {
   3         SVNProperties props = new SVNProperties();
   4         Collection children = repos.getDir(path, revision, props, SVNDirEntry.DIRENT_ALL, null);
   5         pathsToProps.put(path, props);
   6         for (Iterator childrenIter = children.iterator(); childrenIter.hasNext();) {
   7             SVNDirEntry childEntry = (SVNDirEntry) childrenIter.next();
   8             if (childEntry.getKind() == SVNNodeKind.DIR) {
   9                 String childName = childEntry.getName();
  10                 String childPath = !"".equals(path) && !path.endsWith("/") ? 
  11                                    path + "/" + childName : path + childName;
  12                 fetchPropsFromRepository(repos, childPath, revision, pathsToProps);
  13             }
  14         }    
  15     }

So, you simply call getDir() recursively storing properties on the way. But as it has already been mentioned, each call to getDir() results in one more request to the server. Instead you may use SVNRepository's status() method to fetch all the properties with the following benefits:

  • you make only one single request to the server what gives lesser network overhead
  • no recursion at all

Status is an update-like operation, it follows the same concepts described in

Recursively fetching properties from a repository (low-level API) (last edited 2008-09-05 18:59:11 by 194)