ID 502973 - nuke.tcl() creates a dependency in callback updating dependant nodes

Follow

Problem summary
nuke.tcl() creates a dependency in callback updating dependant nodes

nuke.tcl("node <var>"), nuke.tcl("exists <var>") and nuke.tcl("show_info <var>") all seem to have the same issue, but nuke.tcl("frame") doesn't, so it seems to happen with any TCL expression that passes in the node

Customer reported version
nuke.12.2v8

Customer reported platform
centos7

Steps to reproduce

1) Open Nuke and paste in the below nodes:

NoOp { name NoOp2
 knobChanged "import nuke\n\ndef updateName(node):\n    node\['_name'].setValue(\"version=\{\}\".format(node\['version'].value()))\n    nodeid = nuke.tcl(\"node %s\" % node.fullName())\n\ndef knobChanged():\n    if nuke.thisKnob().name() == \"version\":\n        nuke.tprint(\"version\", nuke.thisKnob().value())\n        updateName(nuke.thisNode())\n        for node in nuke.thisNode().dependent(nuke.EXPRESSIONS, forceEvaluate=False):\n            nuke.tprint(nuke.thisNode().fullName(), \"<-\", node.fullName())            \n            updateName(node)\n\nknobChanged()\nfor node in nuke.allNodes():\n    nuke.tprint(node.fullName(), \"->\", node.dependencies())\n    nuke.tprint(node.fullName(), \"<-\", node.dependent())\n"
 label "\[value _name]"
 selected true
 xpos 309
 ypos -30
 addUserKnob {20 User}
 addUserKnob {1 _name}
 _name version=1.0
 addUserKnob {3 version}
 version {{NoOp1.version}}
}
NoOp {
 inputs 0
 name NoOp1
 knobChanged "import nuke\n\ndef updateName(node):\n    node\['_name'].setValue(\"version=\{\}\".format(node\['version'].value()))\n    nodeid = nuke.tcl(\"node %s\" % node.fullName())\n\ndef knobChanged():\n    if nuke.thisKnob().name() == \"version\":\n        nuke.tprint(\"version\", nuke.thisKnob().value())\n        updateName(nuke.thisNode())\n        for node in nuke.thisNode().dependent(nuke.EXPRESSIONS, forceEvaluate=False):\n            nuke.tprint(nuke.thisNode().fullName(), \"<-\", node.fullName())            \n            updateName(node)\n\nknobChanged()\nfor node in nuke.allNodes():\n    nuke.tprint(node.fullName(), \"->\", node.dependencies())\n    nuke.tprint(node.fullName(), \"<-\", node.dependent())\n"
 label "\[value _name]"
 selected true
 xpos 141
 ypos -30
 addUserKnob {20 User}
 addUserKnob {1 _name}
 _name version=1.0
 addUserKnob {3 version}
 version 1
}
2) Notice the node dependencies, as printed in the terminal:



3) Open NoOp1's Properties and change the value in the version knob, the expression link between the nodes now goes both ways, as do the dependencies:



Expected behaviour
For the NoOp2's version to be updated, and dependencies to be correct

Actual behaviour
The nuke.tcl() command created a false dependency between the nodes, which left unchecked and cause recursion issues in more complex scripts

Workaround
Unknown.

Reproduced by support
This bug has been reproduced in:
Nuke 13.1v2 - Windows 10, CentOS 7, macOS Big Sur
Nuke 12.0v1 - Windows 10
Nuke 9.0v1 - Windows 10, macOS Big Sur

Earliest version tested
Nuke 9.0v1 - This issue appears to be in all versions of the product

    We're sorry to hear that

    Please tell us why