You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@subversion.apache.org by Martin Kutter <ma...@fen-net.de> on 2011/08/16 17:09:22 UTC

JavaHL bindings - post-commit error messages

Hello,

is there a way to receive get post-commit error messages on performing a
commit with the JavaHL bindings?

According to the SVN book: "If the post-commit hook returns a nonzero exit
status, [...] anything that the hook printed to stderr will be marshalled
back to the client, making it easier to diagnose hook failures."

Best regards,

Martin

Re: JavaHL bindings - post-commit error messages

Posted by Martin Kutter <ma...@fen-net.de>.
On Wed, 17 Aug 2011 19:56:13 +0200, Martin Kutter
<ma...@fen-net.de> wrote:
> Hi,
> 
> Am Dienstag, den 16.08.2011, 11:14 -0400 schrieb Mark Phippard:
>> On Tue, Aug 16, 2011 at 11:09 AM, Martin Kutter
>> <ma...@fen-net.de>wrote:
>> > is there a way to receive get post-commit error messages on
performing
>> > a
>> > commit with the JavaHL bindings?
>> 
>> Subclipse uses JavaHL and I believe it shows these messages.  Have you
>> registered a call back to receive the Notifications?
>> 
>>
http://subversion.apache.org/docs/javahl/1.6/org/tigris/subversion/javahl/Notify2.html
>> 

Subclipse does not show post-commit error messages (at least not ).

It also looks like JavaHL (1.6.17) does not transmit post-commit error
messages not even in notify callbacks.

Is this a bug?

Steps to reproduce:

1. Create svn repo with failing post-commit hook and output on stderr
2. Test with svn command line client, checkout, perform some change,
commit.
Expected output is like this:
D:\Martin\workspace\test>svn commit -m 'test'
Adding         site

Committed revision 19.

Warning: post-commit hook failed (exit code 1) with output:
"Ausgabe auf STDERR"

3. make some change to the wc, and run the JUnit test below (with paths
changed to match your system)

Test fails, output is 

1.6.17 (r1128011)
Acttion: 17
ChangelistName: null
ContentState: 1
ErrMsg: null
Kind: 2
LockState: 1
MimeType: null
Path: D:/Martin/workspace/test/site
PathPrefix: D:/Martin/workspace
PropState: 1
Revision: -1
Lock: null
MergeRange: null
Source: D:/Martin/workspace/test/site
Commited revision: 18

Here's the test code:

package org.tigris.subversion.javahl;

import static org.junit.Assert.*;

import java.util.ArrayList;
import java.util.List;
import org.junit.Test;

public class SVNClientTest {

	private List<NotifyInformation> notifications = new
ArrayList<NotifyInformation>();
	
	@Test
	public void testCommit() {
		SVNClientInterface client = new SVNClient();
		System.out.println(client.getVersion());
		Notify2 notify = new Notify2() {
			
			@Override
			public void onNotify(NotifyInformation info) {
				System.out.println("Acttion: " + info.getAction());
				System.out.println("ChangelistName: " + info.getChangelistName());
				System.out.println("ContentState: " + info.getContentState());
				System.out.println("ErrMsg: " + info.getErrMsg());
				System.out.println("Kind: " + info.getKind());
				System.out.println("LockState: " + info.getLockState());
				System.out.println("MimeType: " + info.getMimeType());
				System.out.println("Path: " + info.getPath());
				System.out.println("PathPrefix: " + info.getPathPrefix());
				System.out.println("PropState: " + info.getPropState());
				System.out.println("Revision: " + info.getRevision());
				System.out.println("Lock: " + info.getLock());
				System.out.println("MergeRange: " + info.getMergeRange());
				System.out.println("Source: " + info.getSource());
		
				notifications.add(info);
			}
		};
		
		client.notification2(notify);
		
		String[] paths = new String[] { "D:/Martin/workspace/test" };
		String[] changeLists = new String[] {};
		try {
			long result = client.commit(paths, "test", Depth.infinity, false,
false, null, null);
			if (result > 0) {
				System.out.println("Commited revision: " + result);
			}
		} catch (ClientException e) {
			e.printStackTrace();
		}
				
		List<String> errors = new ArrayList<String>();
		for (NotifyInformation info : notifications) {
			if (info.getErrMsg() != null)
				errors.add(info.getErrMsg());
		}
		assertNotSame(0, errors.size());
	}
}


Martin


Re: JavaHL bindings - post-commit error messages

Posted by Martin Kutter <ma...@fen-net.de>.
Hi,

Am Dienstag, den 16.08.2011, 11:14 -0400 schrieb Mark Phippard:
> On Tue, Aug 16, 2011 at 11:09 AM, Martin Kutter <ma...@fen-net.de>wrote:
> > is there a way to receive get post-commit error messages on performing a
> > commit with the JavaHL bindings?
> 
> Subclipse uses JavaHL and I believe it shows these messages.  Have you
> registered a call back to receive the Notifications?
> 
> http://subversion.apache.org/docs/javahl/1.6/org/tigris/subversion/javahl/Notify2.html
> 

A quick test (set up a empty local repo with failing post-commit hook
with some message on STDERR, add a folder to the wc and commit) reveals
that Subclipse (1.6.18) does not show post-commit errors. 

I'll test-drive the notifications API though.

Thanks,

Martin



Re: JavaHL bindings - post-commit error messages

Posted by Mark Phippard <ma...@gmail.com>.
On Tue, Aug 16, 2011 at 11:09 AM, Martin Kutter <ma...@fen-net.de>wrote:

>
> is there a way to receive get post-commit error messages on performing a
> commit with the JavaHL bindings?
>
> According to the SVN book: "If the post-commit hook returns a nonzero exit
> status, [...] anything that the hook printed to stderr will be marshalled
> back to the client, making it easier to diagnose hook failures."
>


Subclipse uses JavaHL and I believe it shows these messages.  Have you
registered a call back to receive the Notifications?

http://subversion.apache.org/docs/javahl/1.6/org/tigris/subversion/javahl/Notify2.html

-- 
Thanks

Mark Phippard
http://markphip.blogspot.com/