threads / patch / 15215

patchavoiding output in the error log

Subject: [egit PATCH] avoiding output in the error log

## tl;dr

5 messages between Aug 27, 2008 and Aug 27, 2008. Diffs are folded; open one to read it.

replies: 4people: 3as markdown or json

robert_no.spam_m@yahoo.fr· Aug 27, 2008, 09:34 UTC · lore

Hi,this is a patch for egit. The purpose of the patch is to avoid a lot of output in the error log.

>From 6f7be5d1a41d356a9b558ac81722e959095ff04d Mon Sep 17 00:00:00 2001
From: robert <robert_no.spam_m@yahoo.fr>
Date: Mon, 25 Aug 2008 20:42:39 +0200
Subject: [PATCH] Checks added to avoid a lot of entries in the log
* IResource.exists() must be checked before calling setProperty on it.
* getActiveDecorator() was returning null in some case.
---
 .../internal/decorators/GitResourceDecorator.java  |   10 +++++++---
 1 files changed, 7 insertions(+), 3 deletions(-)
Show changes to org.spearce.egit.ui/src/org/spearce/egit/ui/internal/decorators/GitResourceDecorator.java +7 −3
diff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/decorators/GitResourceDecorator.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/decorators/GitResourceDecorator.java
index 5857eaf..7c10ec6 100644
--- a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/decorators/GitResourceDecorator.java
+++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/decorators/GitResourceDecorator.java
@@ -143,7 +143,9 @@ if (resources.size() > 0)
 					try {
 						m.accept(new IResourceVisitor() {
 							public boolean visit(IResource resource) throws CoreException {
-								getActiveDecorator().clearDecorationState(resource);
+								GitResourceDecorator decorator = getActiveDecorator();
+								if (decorator != null)
+									decorator.clearDecorationState(resource);
 								return true;
 							}
 						},
@@ -197,8 +199,10 @@ synchronized (resources) {
 	} // End ResCL
 
 	void clearDecorationState(IResource r) throws CoreException {
-		r.setSessionProperty(GITFOLDERDIRTYSTATEPROPERTY, null);
-		fireLabelProviderChanged(new LabelProviderChangedEvent(this, r));
+		if (r.exists()) {
+			r.setSessionProperty(GITFOLDERDIRTYSTATEPROPERTY, null);
+			fireLabelProviderChanged(new LabelProviderChangedEvent(this, r));
+		}
 	}
 
 	static ResCL myrescl = new ResCL();
-- 
1.6.0
Robin Rosenberg· Aug 27, 2008, 20:28 UTC · re: robert_no.spam_m@yahoo.fr · lore

Re: [egit PATCH] avoiding output in the error log

onsdagen den 27 augusti 2008 11.34.33 skrev robert_no.spam_m@yahoo.fr:
> Hi,this is a patch for egit. The purpose of the patch
> is to avoid a lot of output in the error log.
Welcome Robert!
Show 24 quoted lines
> 
> From 6f7be5d1a41d356a9b558ac81722e959095ff04d Mon Sep 17 00:00:00 2001
> From: robert <robert_no.spam_m@yahoo.fr>
> Date: Mon, 25 Aug 2008 20:42:39 +0200
> Subject: [PATCH] Checks added to avoid a lot of entries in the log
> 
> * IResource.exists() must be checked before calling setProperty on it.
> * getActiveDecorator() was returning null in some case.
> ---
>  .../internal/decorators/GitResourceDecorator.java  |   10 +++++++---
>  1 files changed, 7 insertions(+), 3 deletions(-)
> 
> diff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/decorators/GitResourceDecorator.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/decorators/GitResourceDecorator.java
> index 5857eaf..7c10ec6 100644
> --- a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/decorators/GitResourceDecorator.java
> +++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/decorators/GitResourceDecorator.java
> @@ -143,7 +143,9 @@ if (resources.size() > 0)
>  					try {
>  						m.accept(new IResourceVisitor() {
>  							public boolean visit(IResource resource) throws CoreException {
> -								getActiveDecorator().clearDecorationState(resource);
> +								GitResourceDecorator decorator = getActiveDecorator();
> +								if (decorator != null)
> +									decorator.clearDecorationState(resource);
When doest his happen?
Show 13 quoted lines
>  								return true;
>  							}
>  						},
> @@ -197,8 +199,10 @@ synchronized (resources) {
>  	} // End ResCL
>  
>  	void clearDecorationState(IResource r) throws CoreException {
> -		r.setSessionProperty(GITFOLDERDIRTYSTATEPROPERTY, null);
> -		fireLabelProviderChanged(new LabelProviderChangedEvent(this, r));
> +		if (r.exists()) {
> +			r.setSessionProperty(GITFOLDERDIRTYSTATEPROPERTY, null);
> +			fireLabelProviderChanged(new LabelProviderChangedEvent(this, r));
> +		}

Shawn, you removed the test from the code in 4a230ea1. Perhaps you could care to comment on this patch to restore the test, though slightly different.

		if (r.isAccessible())
			r.setSessionProperty(GITFOLDERDIRTYSTATEPROPERTY, null);
-- robin
Shawn O. Pearce· Aug 27, 2008, 20:33 UTC · re: Robin Rosenberg · lore

Re: [egit PATCH] avoiding output in the error log

Robin Rosenberg <robin.rosenberg.lists@dewire.com> wrote:
Show 16 quoted lines
> > @@ -197,8 +199,10 @@ synchronized (resources) {
> >  	} // End ResCL
> >  
> >  	void clearDecorationState(IResource r) throws CoreException {
> > -		r.setSessionProperty(GITFOLDERDIRTYSTATEPROPERTY, null);
> > -		fireLabelProviderChanged(new LabelProviderChangedEvent(this, r));
> > +		if (r.exists()) {
> > +			r.setSessionProperty(GITFOLDERDIRTYSTATEPROPERTY, null);
> > +			fireLabelProviderChanged(new LabelProviderChangedEvent(this, r));
> > +		}
> 
> Shawn, you removed the test from the code in 4a230ea1. Perhaps you could care to
> comment on this patch to restore the test, though slightly different.
> 
> 		if (r.isAccessible())
> 			r.setSessionProperty(GITFOLDERDIRTYSTATEPROPERTY, null);
This may be a patch queue reordering bug.

If you look at 4a230ea1 I moved the isAccessible test higher up, such that we shouldn't enter into clearDecorationState unless the resource is accessible. But there may currently be two code paths that enter this method, and a patch I did not yet submit had removed the other code path.

So in the short/medium term I agree with your patch, basically undo the second hunk of 4a230ea1. But keep the middle hunk, it was a real bug I ran into.

-- 
Shawn.
Robin Rosenberg· Aug 27, 2008, 21:50 UTC · re: Shawn O. Pearce · lore

Re: [egit PATCH] avoiding output in the error log

onsdagen den 27 augusti 2008 22.33.43 skrev Shawn O. Pearce:
Show 25 quoted lines
> Robin Rosenberg <robin.rosenberg.lists@dewire.com> wrote:
> > > @@ -197,8 +199,10 @@ synchronized (resources) {
> > >  	} // End ResCL
> > >  
> > >  	void clearDecorationState(IResource r) throws CoreException {
> > > -		r.setSessionProperty(GITFOLDERDIRTYSTATEPROPERTY, null);
> > > -		fireLabelProviderChanged(new LabelProviderChangedEvent(this, r));
> > > +		if (r.exists()) {
> > > +			r.setSessionProperty(GITFOLDERDIRTYSTATEPROPERTY, null);
> > > +			fireLabelProviderChanged(new LabelProviderChangedEvent(this, r));
> > > +		}
> > 
> > Shawn, you removed the test from the code in 4a230ea1. Perhaps you could care to
> > comment on this patch to restore the test, though slightly different.
> > 
> > 		if (r.isAccessible())
> > 			r.setSessionProperty(GITFOLDERDIRTYSTATEPROPERTY, null);
> 
> This may be a patch queue reordering bug.
> 
> If you look at 4a230ea1 I moved the isAccessible test higher up,
> such that we shouldn't enter into clearDecorationState unless the
> resource is accessible.  But there may currently be two code paths
> that enter this method, and a patch I did not yet submit had removed
> the other code path.

Good. So then the question is whether we should use isAccessible() or exists()? Normally this makes no difference, but for a Project (at least) there is a difference. I project that exits is not accessible when closed.

-- robin
Shawn O. Pearce· Aug 27, 2008, 22:00 UTC · re: Robin Rosenberg · lore

Re: [egit PATCH] avoiding output in the error log

Robin Rosenberg <robin.rosenberg.lists@dewire.com> wrote:
Show 10 quoted lines
> > > 
> > > Shawn, you removed the test from the code in 4a230ea1. Perhaps you could care to
> > > comment on this patch to restore the test, though slightly different.
> > > 
> > > 		if (r.isAccessible())
> > > 			r.setSessionProperty(GITFOLDERDIRTYSTATEPROPERTY, null);
> 
> Good. So then the question is whether we should use isAccessible() or exists()? Normally
> this makes no difference, but for a Project (at least) there is a difference. I project that exits
> is not accessible when closed. 

It _has_ to be isAccessible(). You cannot get or set a session property on a closed project.

-- 
Shawn.

← back to recent threads