[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

A Patch for the svnClientAdapter.

From: Sung Kim <hunkims_at_hotmail.com>
Date: 2003-11-08 06:08:40 CET

Hello,

I found a small bug in the CmdLineLogMessage.java
Actually the line number in the log is not the message line number!

For example:
------------------------------------------------------------------------
rev 171: jbevan | 2003-11-05 17:20:34 -0800 (Wed, 05 Nov 2003) | 3
lines
added equals method.
------------------------------------------------------------------------
rev 172: hunkim | 2003-11-06 20:30:17 -0800 (Thu, 06 Nov 2003) | 1 line
Minor changes in SVN implementation
------------------------------------------------------------------------
rev 173: hunkim | 2003-11-06 21:14:03 -0800 (Thu, 06 Nov 2003) | 3
lines
This is a preliminary version of DeltaInfo implementation using XPath.
I need to translate general diff file to XML to finish this
implementation.
------------------------------------------------------------------------

The CmdLineLogMessage parses the count and read lines based on the
count:
 int messageLineCount = Integer.parseInt(rightToken.nextToken());

I added simple patch for that, but I thing we should use --xml flag to
get XML log which is easier to parse.

Also the attatched patch includes the properyList method which gets a
list of properties.

-
Sung Kim

PS - I created the patch using Subclipse!!

Index:
D:/eclipse3/workspace/svnClientAdapter/src/main/org/tigris/subversion/sv
nclientadapter/commandline/CmdLineLogMessage.java
===================================================================

---
D:/eclipse3/workspace/svnClientAdapter/src/main/org/tigris/subversion/sv
nclientadapter/commandline/CmdLineLogMessage.java	(revision 276)
+++
D:/eclipse3/workspace/svnClientAdapter/src/main/org/tigris/subversion/sv
nclientadapter/commandline/CmdLineLogMessage.java	(working copy)
@@ -77,6 +77,7 @@
 		
 		//grab "rev 49:  phil | 2003-06-30 00:14:58 -0500 (Mon,
30 Jun 2003) | 1 line"
 		String headerLine = st.nextToken();
+		
 		//split the line up into 3 parts, left, middle, and
right.
 		StringTokenizer ltr = new StringTokenizer(headerLine,
"|");
 		String left = ltr.nextToken();
@@ -100,23 +101,24 @@
 		date = Helper.toDate(middle.trim());
 		
 		//get the number of lines.
+		// TODO: It is not a log line number. See:
+		// rev 167:  hunkim | 2003-11-05 14:00:49 -0800 (Wed, 05
Nov 2003) | 1 line
 		StringTokenizer rightToken = new StringTokenizer(right,
" ");
 		int messageLineCount =
Integer.parseInt(rightToken.nextToken());
 		
 		//get the body of the log.
 		StringBuffer sb = new StringBuffer();
 		//st.nextToken(); //next line is always blank.
-		for(int i=0; i < messageLineCount; i++) {
-			sb.append(st.nextToken());
+		for(int i=0; st.hasMoreTokens();i++) {
+			String msgLine = st.nextToken();
+			if
(msgLine.equals("-------------------------------------------------------
-----------------"))
+				break;
 			
-			//dont add a newline to the last line.
-			if(i < messageLineCount - 1)
+			if (i!=0)
 				sb.append('\n');
+			sb.append(st.nextToken());		
 		}
 		msg = sb.toString();
-		
-		//take off the last dashes
"-----------------------------------------"
-		st.nextToken();
 	}
 
 	/* (non-Javadoc)
Index:
D:/eclipse3/workspace/svnClientAdapter/src/main/org/tigris/subversion/sv
nclientadapter/commandline/CommandLine.java
===================================================================
---
D:/eclipse3/workspace/svnClientAdapter/src/main/org/tigris/subversion/sv
nclientadapter/commandline/CommandLine.java	(revision 276)
+++
D:/eclipse3/workspace/svnClientAdapter/src/main/org/tigris/subversion/sv
nclientadapter/commandline/CommandLine.java	(working copy)
@@ -93,6 +93,7 @@
 	private static String CMD_MKDIR = "mkdir -m \"{0}\" {1}";
 	private static String CMD_MKDIR_LOCAL = "mkdir {0}";
 	private static String CMD_MOVE = "mv -r {0} {1} {2} {3}
--force";
+	private static String CMD_PROPLIST = "proplist -v {0}";
 	private static String CMD_PROPGET = "propget {0} {1}";
 	private static String CMD_PROPSET = "propset {0} \"{1}\" {2}";
 	private static String CMD_PROPSET_FILE = "propset {0} -F \"{1}\"
{2}";
@@ -389,9 +390,20 @@
 				new String[] { validRev(revision),
source, dest, messageStr })
 				+ getAuthInfo());
 	}
-
 	/**
 	 * <p>
+	 * Print list of <tt>properties</tt> on files, dirs, or
revisions.</p>
+	 *
+	 * @param Local path of resource.
+	 */
+	InputStream proplist(String path) throws CmdLineException {
+		Process proc =
+		execProcess(MessageFormat.format(CMD_PROPLIST, new
String[] { path }));
+		return proc.getInputStream();
+	}
+	
+	/**
+	 * <p>
 	 * Print value of <tt>propName</tt> on files, dirs, or
revisions.</p>
 	 *
 	 * @param Local path of resource.
Index:
D:/eclipse3/workspace/svnClientAdapter/src/main/org/tigris/subversion/sv
nclientadapter/commandline/CmdLineClientAdapter.java
===================================================================
---
D:/eclipse3/workspace/svnClientAdapter/src/main/org/tigris/subversion/sv
nclientadapter/commandline/CmdLineClientAdapter.java	(revision 276)
+++
D:/eclipse3/workspace/svnClientAdapter/src/main/org/tigris/subversion/sv
nclientadapter/commandline/CmdLineClientAdapter.java	(working copy)
@@ -566,7 +566,47 @@
 		// TODO : test
 		diff(url, oldUrlRevision, url, newUrlRevision, outFile,
recurse);
 	}
-
+	
+	public ISVNProperty[] propertyList(File path) throws
SVNClientException {
+		try {
+			String pathString = toString(path);
+			InputStream valueAndData =
_cmd.proplist(toString(path));
+			
+			byte[] bytes = streamToByteArray(valueAndData,
true);
+			
+			List propList = new java.util.LinkedList();
+			String strList = new String(bytes);
+			// Simple proplist
+			//D:\repos>svn proplist -v bookmark.htm
+			//Properties on 'bookmark.htm':
+			//  aa : kk
+			// TODO If propertyName="aa : kk" it is hard to
parse
+			// But assume there is no : in name
+			StringTokenizer tok = new
StringTokenizer(strList, Helper.NEWLINE);
+			// Skip the first line: Properties on
'bookmark.htm':
+			if (tok.hasMoreTokens())
+				tok.nextToken();
+			// Starts from here
+			while(tok.hasMoreTokens()) {
+				String nameValue = tok.nextToken();
+				// Find " : "
+				int seperator = nameValue.indexOf(" :
");
+				if (seperator != -1) {
+					String name =
nameValue.substring(0, seperator);
+					String value =
nameValue.substring(seperator+3); // strlen(" : ")
+					propList.add(new
CmdLineProperty(name, value, pathString, bytes));
+				} else { // No name and value pair ??
+					propList.add(new
CmdLineProperty(nameValue, null, pathString, bytes));
+				}				
+			}
+			return (ISVNProperty[]) propList.toArray(new
ISVNProperty[propList.size()]);
+		} catch (CmdLineException e) {
+			throw SVNClientException.wrapException(e);
+		} catch (IOException e) {
+			throw SVNClientException.wrapException(e);
+		}
+	}
+	
 	public ISVNProperty propertyGet(File path, String propertyName)
throws SVNClientException {
 		try {
 			String pathString = toString(path);
Index:
D:/eclipse3/workspace/svnClientAdapter/src/main/org/tigris/subversion/sv
nclientadapter/ISVNClientAdapter.java
===================================================================
---
D:/eclipse3/workspace/svnClientAdapter/src/main/org/tigris/subversion/sv
nclientadapter/ISVNClientAdapter.java	(revision 276)
+++
D:/eclipse3/workspace/svnClientAdapter/src/main/org/tigris/subversion/sv
nclientadapter/ISVNClientAdapter.java	(working copy)
@@ -344,7 +344,19 @@
 		String propertyValue,
 		boolean recurse)
 		throws SVNClientException;
+	
 	/**
+	 * Get list of propertie names
+	 * @param path
+	 * @param recurse
+	 * @throws SVNClientException
+	 */
+	
+	public ISVNProperty[] propertyList(
+			File path)
+	throws SVNClientException;
+	
+	/**
 	 * set a property using the content of a file 
 	 */
 	public abstract void propertySet(
Index:
D:/eclipse3/workspace/svnClientAdapter/src/main/org/tigris/subversion/sv
nclientadapter/javahl/JhlClientAdapter.java
===================================================================
---
D:/eclipse3/workspace/svnClientAdapter/src/main/org/tigris/subversion/sv
nclientadapter/javahl/JhlClientAdapter.java	(revision 276)
+++
D:/eclipse3/workspace/svnClientAdapter/src/main/org/tigris/subversion/sv
nclientadapter/javahl/JhlClientAdapter.java	(working copy)
@@ -835,6 +835,39 @@
 		}
 	}
 
+	/**
+	 * Get properties list
+	 * @param path
+	 * @return
+	 * @throws SVNClientException
+	 */
+	public ISVNProperty[] propertyList(File path) throws
SVNClientException {
+		try {
+
notificationHandler.setCommand(ISVNNotifyListener.Command.PROPSET);
+			
+			String target = fileToSVNPath(path, true);
+			notificationHandler.setCommandLine(
+					"proplist "
+					+ target);
+			
+			PropertyData []propData =
svnClient.properties(target);
+			if (propData==null)
+				return null;
+			
+			// Create array for return
+			JhlPropertyData []propList = new
JhlPropertyData[propData.length];
+			// Transfer data for each element
+			for (int i=0; i<propList.length; i++)
+				propList[i] = new
JhlPropertyData(propData[i]);
+			// return list			
+			return propList;			
+			
+		} catch (ClientException e) {
+			notificationHandler.setException(e);
+			throw new SVNClientException(e);
+		}		
+	}
+	
     /**
      * set a property
      * @param path

Received on Sat Nov 8 16:08:40 2003

This is an archived mail posted to the Subclipse Dev mailing list.