Avoid reporting false positives when a colon is in a comment in the first line of a script where the user was not trying to select a different script engine.
This works by only posting the "Selected engine unavailable" message if we're falling back on XEngine and the language is one handled by XEngine. In cases where the language is not handled or not allowed, the user will still be notified by the later compiler error. This avoids the overwhelming majority of false positives where the first line contains a : for other reasons (e.g. source control systems, vim settings, etc.) Ultimately, I think it would be better to detect script language/engine with a mechanism that didn't just rely on : detection (e.g like #! in unix scripts).0.7.4.1
parent
f9769a9fcb
commit
25baa2d894
|
@ -779,24 +779,48 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
|||
{
|
||||
if (engine == ScriptEngineName)
|
||||
{
|
||||
SceneObjectPart part =
|
||||
m_Scene.GetSceneObjectPart(
|
||||
localID);
|
||||
// If we are falling back on XEngine as the default engine, then only complain to the user
|
||||
// if a script language has been explicitly set and it's one that we recognize. If it's
|
||||
// explicitly not allowed or the script is not in LSL then the user will be informed by a later compiler message.
|
||||
//
|
||||
// This avoids the overwhelming number of false positives where we're in this code because
|
||||
// there's a colon in a comment in the first line of a script for entirely
|
||||
// unrelated reasons (e.g. vim settings).
|
||||
//
|
||||
// TODO: A better fix would be to deprecate simple : detection and look for some less likely
|
||||
// string to begin the comment (like #! in unix shell scripts).
|
||||
bool scriptExplicitlyInXEngineLanguage = false;
|
||||
string restOfScript = script.Substring(colon + 1);
|
||||
|
||||
TaskInventoryItem item =
|
||||
part.Inventory.GetInventoryItem(itemID);
|
||||
// FIXME: These are hardcoded because they are currently hardcoded in Compiler.cs
|
||||
if (restOfScript.StartsWith("c#")
|
||||
|| restOfScript.StartsWith("vb")
|
||||
|| restOfScript.StartsWith("lsl")
|
||||
|| restOfScript.StartsWith("js")
|
||||
|| restOfScript.StartsWith("yp"))
|
||||
scriptExplicitlyInXEngineLanguage = true;
|
||||
|
||||
ScenePresence presence =
|
||||
m_Scene.GetScenePresence(
|
||||
item.OwnerID);
|
||||
|
||||
if (presence != null)
|
||||
if (scriptExplicitlyInXEngineLanguage)
|
||||
{
|
||||
presence.ControllingClient.SendAgentAlertMessage(
|
||||
"Selected engine unavailable. "+
|
||||
"Running script on "+
|
||||
ScriptEngineName,
|
||||
false);
|
||||
SceneObjectPart part =
|
||||
m_Scene.GetSceneObjectPart(
|
||||
localID);
|
||||
|
||||
TaskInventoryItem item =
|
||||
part.Inventory.GetInventoryItem(itemID);
|
||||
|
||||
ScenePresence presence =
|
||||
m_Scene.GetScenePresence(
|
||||
item.OwnerID);
|
||||
|
||||
if (presence != null)
|
||||
{
|
||||
presence.ControllingClient.SendAgentAlertMessage(
|
||||
"Selected engine unavailable. "+
|
||||
"Running script on "+
|
||||
ScriptEngineName,
|
||||
false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue