Differences between revisions 3 and 4
Revision 3 as of 2008-09-03 16:13:53
Size: 4873
Editor: 194
Comment:
Revision 4 as of 2008-09-03 16:32:59
Size: 5559
Editor: 194
Comment:
Deletions are marked like this. Additions are marked like this.
Line 105: Line 105:
Now here come several comments on the ''doDiff()'' method itself. We used the pegged versiond of ''doDiff()'' which runs diff on different revisions of the same file.
The second parameter, ''SVNRevision.UNKWNOWN'' denotes that we do not provide any special
Now here come several comments on the ''doDiff()'' method itself. We used the pegged version of ''doDiff()'' which runs diff on different revisions of the same tree (or file).
As the second parameter we pass ''SVNRevision.UNKWNOWN'' what denotes that we do not provide any special peg revision. This will automatically default to the HEAD revision.

Then we provide ''SVNRevision.WORKING'' and ''SVNRevision.HEAD'' as we want to diff working tree with the one located in the repository at HEAD revision.

''SVNDepth.INFINITY'' says that want to diff the entire tree recursively.

Then comes the ''useAncestry'' flag - in this example we want to diff only related object, so we pass ''true''.

System.out - this is a diff output receiver stream.

And at last we do not have changelists in our working copy and want diff to operate on the entire tree, not just on members of some changelist (in case we had one). So, we pass ''null''.

This is an example of performing diff on an entire working copy against the repository. Below we will enumerate the main steps performed by this example program, and reflect those steps in code comments as well, so that you could keep track of what the program does.

  1. We create a brand-new repository.
  2. Then populate it with a greek tree not using file system directories and files. All this initializing work is done with the help of the utility class called SamplesUtility.

  3. Then checkout a working copy.
  4. Then make text changes in two files and set a property on a directory.
  5. Then we diff our working copy against the repository.

   1 /*
   2  * ====================================================================
   3  * Copyright (c) 2004-2008 TMate Software Ltd.  All rights reserved.
   4  *
   5  * This software is licensed as described in the file COPYING, which
   6  * you should have received as part of this distribution.  The terms
   7  * are also available at http://svnkit.com/license.html.
   8  * If newer versions of this license are posted there, you may use a
   9  * newer version instead, at your option.
  10  * ====================================================================
  11  */
  12 package org.tmatesoft.svn.examples.wc;
  13 import java.io.File;
  14 import java.io.IOException;
  15 import org.tmatesoft.svn.core.SVNCommitInfo;
  16 import org.tmatesoft.svn.core.SVNDepth;
  17 import org.tmatesoft.svn.core.SVNException;
  18 import org.tmatesoft.svn.core.SVNPropertyValue;
  19 import org.tmatesoft.svn.core.SVNURL;
  20 import org.tmatesoft.svn.core.wc.SVNClientManager;
  21 import org.tmatesoft.svn.core.wc.SVNDiffClient;
  22 import org.tmatesoft.svn.core.wc.SVNRevision;
  23 import org.tmatesoft.svn.core.wc.SVNWCClient;
  24 /**
  25  * This examples demonstrate how you can run WORKING:HEAD diff.
  26  *
  27  * @version 1.2.0
  28  * @author  TMate Software Ltd.
  29  */
  30 public class DiffWCToRepository {
  31 
  32     /**
  33      * Pass the absolute path of the base directory where all example data will be created in
  34      * arg[0]. The sample will create:
  35      *
  36      *  - arg[0]/exampleRepository - repository with some test data
  37      *  - arg[0]/exampleWC         - working copy checked out from exampleRepository
  38      */
  39     public static void main (String[] args) {
  40         //initialize SVNKit to work through file:/// protocol
  41         SamplesUtility.initializeFSFSprotocol();
  42 
  43         File baseDirectory = new File(args[0]);
  44         File reposRoot = new File(baseDirectory, "exampleRepository");
  45         File wcRoot = new File(baseDirectory, "exampleWC");
  46 
  47         try {
  48             //1. first create a repository and fill it with data
  49             SamplesUtility.createRepository(reposRoot);
  50             //2. populate the repository with the greek tree in a single transaction
  51             SVNCommitInfo info = SamplesUtility.createRepositoryTree(reposRoot);
  52             //pring out the commit information
  53             System.out.println(info);
  54 
  55             //3. checkout the entire repository tree
  56             SVNURL reposURL = SVNURL.fromFile(reposRoot);
  57             SamplesUtility.checkOutWorkingCopy(reposURL, wcRoot);
  58 
  59             //4. now make some changes to the working copy
  60             SamplesUtility.writeToFile(new File(wcRoot, "iota"), "New text appended to 'iota'", true);
  61             SamplesUtility.writeToFile(new File(wcRoot, "A/mu"), "New text in 'mu'", false);
  62 
  63             SVNClientManager clientManager = SVNClientManager.newInstance();
  64             SVNWCClient wcClient = SVNClientManager.newInstance().getWCClient();
  65             //set some property on a working copy directory
  66             wcClient.doSetProperty(new File(wcRoot, "A/B"), "spam", SVNPropertyValue.create("egg"), false,
  67                     SVNDepth.EMPTY, null, null);
  68 
  69             //5. now run diff the working copy against the repository
  70             SVNDiffClient diffClient = clientManager.getDiffClient();
  71             /*
  72              * This corresponds to 'svn diff -rHEAD'.
  73              */
  74             diffClient.doDiff(wcRoot, SVNRevision.UNDEFINED, SVNRevision.WORKING, SVNRevision.HEAD,
  75                     SVNDepth.INFINITY, true, System.out, null);
  76         } catch (SVNException svne) {
  77             System.out.println(svne.getErrorMessage());
  78             System.exit(1);
  79         } catch (IOException ioe) {
  80             ioe.printStackTrace();
  81             System.exit(1);
  82         }
  83     }
  84 
  85 }

What we do with the SVNDiffClient here in this example is equivalent to calling the command line client with the following parameters:

$svn diff -rHEAD

Now here come several comments on the doDiff() method itself. We used the pegged version of doDiff() which runs diff on different revisions of the same tree (or file). As the second parameter we pass SVNRevision.UNKWNOWN what denotes that we do not provide any special peg revision. This will automatically default to the HEAD revision.

Then we provide SVNRevision.WORKING and SVNRevision.HEAD as we want to diff working tree with the one located in the repository at HEAD revision.

SVNDepth.INFINITY says that want to diff the entire tree recursively.

Then comes the useAncestry flag - in this example we want to diff only related object, so we pass true.

System.out - this is a diff output receiver stream.

And at last we do not have changelists in our working copy and want diff to operate on the entire tree, not just on members of some changelist (in case we had one). So, we pass null.

Diffing a working copy against a repository (last edited 2008-09-04 15:55:28 by 194)