Couple of options I can see
1 - issue an svn status --show-updates before the svn up and work out if there are any changes ( should be as simple as counting the lines in the response - I think and up to date folder would generate only 1 line )
2 - change from svn-update task to exec task and redirect the output from svn up into a test file that you can post process to determine if any updates were made ( similar to first option ).
3 - Grab the svn log after the svn up with a task based on http://jonathanmalek.com/wp/?p=244 and then process the xml to determine if any changes were made. This would only work if you were guaranteed only 1 rev number increase as it only gets log info for last revision. Variation on this would be grab the log before the svn up and after and then compare them.
Personally I would go with option 2. Running svn up on an up to date working directory results in one line (At revision ) therefore change from using the svn update task to the following:
<target name="Svn-update">
<!-- Default to true so failure mode is to build / signal build is required -->
<property name="source.changed" value="true"/>
<exec
program="svn.exe"
commandline=’up′
output="_update.log"
failonerror="true"/>
<property name="updates.count" value="0"/>
<foreach item="Line" in="_update.log" property="updates.line" trim="Both">
<property name="updates.count" value="${int::parse(updates.count) + 1}"/>
</foreach>
<if test="${updates.count==1}">
<!-- An up to date working directory generates a single line "At revision xxx" -->
<property name="source.changed" value="false"/>
</if>
</target>
now you can use if="${source.change=='true'}" and unless="${source.changed=='true'}" to determine when you should and should execute the remainder of your build and notifications