{"action":"created","comment":{"url":"https://api.github.com/repos/DynamoDS/Dynamo/pulls/comments/30385938","id":30385938,"diff_hunk":"@@ -279,7 +279,7 @@ private void EnsureValidRecorderStates()\n         /// <param name=\"model\">The model to check against.</param>\n         /// <returns>Returns true if the model has already been recorded in the\n         /// current action group, or false otherwise.</returns>\n-        private bool IsRecordedInActionGroup(XmlElement group, ModelBase model)\n+        private bool IsRecordedInActionGroup(XmlElement group, ModelBase model, UserAction action)","path":"src/DynamoCore/Core/UndoRedoRecorder.cs","position":5,"original_position":5,"commit_id":"531b811840934c6d7fe30d414e295fd233084fa8","original_commit_id":"531b811840934c6d7fe30d414e295fd233084fa8","user":{"login":"Benglin","id":5086849,"avatar_url":"https://avatars.githubusercontent.com/u/5086849?v=3","gravatar_id":"","url":"https://api.github.com/users/Benglin","html_url":"https://github.com/Benglin","followers_url":"https://api.github.com/users/Benglin/followers","following_url":"https://api.github.com/users/Benglin/following{/other_user}","gists_url":"https://api.github.com/users/Benglin/gists{/gist_id}","starred_url":"https://api.github.com/users/Benglin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Benglin/subscriptions","organizations_url":"https://api.github.com/users/Benglin/orgs","repos_url":"https://api.github.com/users/Benglin/repos","events_url":"https://api.github.com/users/Benglin/events{/privacy}","received_events_url":"https://api.github.com/users/Benglin/received_events","type":"User","site_admin":false},"body":"The reason we did not have `UserAction` here is because it shouldn't matter. I can't say I remember what was the scenario, but for example if a code block node is created *and* edited in the same action group, the editing should not be recorded (otherwise the first undo will result in just undoing the edit, instead of removing the whole code block). This may not be the scenario but I'm afraid there might be others.\r\n\r\nFor your case, I was wondering why did we record the `ConnectorModel` creation in the first place if it is not meant to last. Can we not do the thing `ModelModificationUndoHelper` does, where it compares the connector set *before* and *after* the editing, then try to record only the real difference (whatever that comes up and goes away in the middle, does not get recorded). Does that make sense?","created_at":"2015-05-15T05:31:19Z","updated_at":"2015-05-15T05:31:19Z","html_url":"https://github.com/DynamoDS/Dynamo/pull/4478#discussion_r30385938","pull_request_url":"https://api.github.com/repos/DynamoDS/Dynamo/pulls/4478","_links":{"self":{"href":"https://api.github.com/repos/DynamoDS/Dynamo/pulls/comments/30385938"},"html":{"href":"https://github.com/DynamoDS/Dynamo/pull/4478#discussion_r30385938"},"pull_request":{"href":"https://api.github.com/repos/DynamoDS/Dynamo/pulls/4478"}}},"pull_request":{"url":"https://api.github.com/repos/DynamoDS/Dynamo/pulls/4478","id":35395071,"html_url":"https://github.com/DynamoDS/Dynamo/pull/4478","diff_url":"https://github.com/DynamoDS/Dynamo/pull/4478.diff","patch_url":"https://github.com/DynamoDS/Dynamo/pull/4478.patch","issue_url":"https://api.github.com/repos/DynamoDS/Dynamo/issues/4478","number":4478,"state":"open","locked":false,"title":"Enable node to code in debug mode and fix undo crash in node to code","user":{"login":"ke-yu","id":2600379,"avatar_url":"https://avatars.githubusercontent.com/u/2600379?v=3","gravatar_id":"","url":"https://api.github.com/users/ke-yu","html_url":"https://github.com/ke-yu","followers_url":"https://api.github.com/users/ke-yu/followers","following_url":"https://api.github.com/users/ke-yu/following{/other_user}","gists_url":"https://api.github.com/users/ke-yu/gists{/gist_id}","starred_url":"https://api.github.com/users/ke-yu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ke-yu/subscriptions","organizations_url":"https://api.github.com/users/ke-yu/orgs","repos_url":"https://api.github.com/users/ke-yu/repos","events_url":"https://api.github.com/users/ke-yu/events{/privacy}","received_events_url":"https://api.github.com/users/ke-yu/received_events","type":"User","site_admin":false},"body":"### Purpose\r\n\r\nThis PR does two things:\r\n  * Enable Node to Code in debug mode so that we could start testing this feature.  \r\n  * Fix undo crash in Node to Code\r\n\r\nFor the crash in undo, that is because Node to Code might create multiple code block nodes if there are holes in the selection  (custom nodes and partially applied functions won't be converted now, so they are \"holes\" in the graph) or selected nodes don't form a clique, so it is possible that a newly created connector may be deleted in the following steps (for example, a new code block node that the connector connects to is combined with other code block node, therefore connectors between them should be removed).\r\n\r\nThe creation and deletion of connectors will be recorded by `UndoRedoRecorder`, but if these actions happen in the same session, the second (deletion) will not be recorded (to avoid in some case redundant actions to be recorded) because deletion has same target model GUID, although these two actions are different. So to determine if an action has been recorded in an action group, we not only check its GUID, but also check its action type. \r\n\r\n### Reviewers\r\n\r\n- [ ] @Benglin \r\n\r\n### FYIs\r\n@lukechurch , once this PR is merged, you could start playing with Node to Code. ","created_at":"2015-05-14T05:29:14Z","updated_at":"2015-05-15T05:31:19Z","closed_at":null,"merged_at":null,"merge_commit_sha":"0bbe3f83062c9311df266dac6e88a806e186e84b","assignee":{"login":"Benglin","id":5086849,"avatar_url":"https://avatars.githubusercontent.com/u/5086849?v=3","gravatar_id":"","url":"https://api.github.com/users/Benglin","html_url":"https://github.com/Benglin","followers_url":"https://api.github.com/users/Benglin/followers","following_url":"https://api.github.com/users/Benglin/following{/other_user}","gists_url":"https://api.github.com/users/Benglin/gists{/gist_id}","starred_url":"https://api.github.com/users/Benglin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Benglin/subscriptions","organizations_url":"https://api.github.com/users/Benglin/orgs","repos_url":"https://api.github.com/users/Benglin/repos","events_url":"https://api.github.com/users/Benglin/events{/privacy}","received_events_url":"https://api.github.com/users/Benglin/received_events","type":"User","site_admin":false},"milestone":null,"commits_url":"https://api.github.com/repos/DynamoDS/Dynamo/pulls/4478/commits","review_comments_url":"https://api.github.com/repos/DynamoDS/Dynamo/pulls/4478/comments","review_comment_url":"https://api.github.com/repos/DynamoDS/Dynamo/pulls/comments{/number}","comments_url":"https://api.github.com/repos/DynamoDS/Dynamo/issues/4478/comments","statuses_url":"https://api.github.com/repos/DynamoDS/Dynamo/statuses/531b811840934c6d7fe30d414e295fd233084fa8","head":{"label":"ke-yu:fix_n2c_undo","ref":"fix_n2c_undo","sha":"531b811840934c6d7fe30d414e295fd233084fa8","user":{"login":"ke-yu","id":2600379,"avatar_url":"https://avatars.githubusercontent.com/u/2600379?v=3","gravatar_id":"","url":"https://api.github.com/users/ke-yu","html_url":"https://github.com/ke-yu","followers_url":"https://api.github.com/users/ke-yu/followers","following_url":"https://api.github.com/users/ke-yu/following{/other_user}","gists_url":"https://api.github.com/users/ke-yu/gists{/gist_id}","starred_url":"https://api.github.com/users/ke-yu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ke-yu/subscriptions","organizations_url":"https://api.github.com/users/ke-yu/orgs","repos_url":"https://api.github.com/users/ke-yu/repos","events_url":"https://api.github.com/users/ke-yu/events{/privacy}","received_events_url":"https://api.github.com/users/ke-yu/received_events","type":"User","site_admin":false},"repo":{"id":18300645,"name":"Dynamo","full_name":"ke-yu/Dynamo","owner":{"login":"ke-yu","id":2600379,"avatar_url":"https://avatars.githubusercontent.com/u/2600379?v=3","gravatar_id":"","url":"https://api.github.com/users/ke-yu","html_url":"https://github.com/ke-yu","followers_url":"https://api.github.com/users/ke-yu/followers","following_url":"https://api.github.com/users/ke-yu/following{/other_user}","gists_url":"https://api.github.com/users/ke-yu/gists{/gist_id}","starred_url":"https://api.github.com/users/ke-yu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ke-yu/subscriptions","organizations_url":"https://api.github.com/users/ke-yu/orgs","repos_url":"https://api.github.com/users/ke-yu/repos","events_url":"https://api.github.com/users/ke-yu/events{/privacy}","received_events_url":"https://api.github.com/users/ke-yu/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/ke-yu/Dynamo","description":"Visual Programming For Revit","fork":true,"url":"https://api.github.com/repos/ke-yu/Dynamo","forks_url":"https://api.github.com/repos/ke-yu/Dynamo/forks","keys_url":"https://api.github.com/repos/ke-yu/Dynamo/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ke-yu/Dynamo/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ke-yu/Dynamo/teams","hooks_url":"https://api.github.com/repos/ke-yu/Dynamo/hooks","issue_events_url":"https://api.github.com/repos/ke-yu/Dynamo/issues/events{/number}","events_url":"https://api.github.com/repos/ke-yu/Dynamo/events","assignees_url":"https://api.github.com/repos/ke-yu/Dynamo/assignees{/user}","branches_url":"https://api.github.com/repos/ke-yu/Dynamo/branches{/branch}","tags_url":"https://api.github.com/repos/ke-yu/Dynamo/tags","blobs_url":"https://api.github.com/repos/ke-yu/Dynamo/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ke-yu/Dynamo/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ke-yu/Dynamo/git/refs{/sha}","trees_url":"https://api.github.com/repos/ke-yu/Dynamo/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ke-yu/Dynamo/statuses/{sha}","languages_url":"https://api.github.com/repos/ke-yu/Dynamo/languages","stargazers_url":"https://api.github.com/repos/ke-yu/Dynamo/stargazers","contributors_url":"https://api.github.com/repos/ke-yu/Dynamo/contributors","subscribers_url":"https://api.github.com/repos/ke-yu/Dynamo/subscribers","subscription_url":"https://api.github.com/repos/ke-yu/Dynamo/subscription","commits_url":"https://api.github.com/repos/ke-yu/Dynamo/commits{/sha}","git_commits_url":"https://api.github.com/repos/ke-yu/Dynamo/git/commits{/sha}","comments_url":"https://api.github.com/repos/ke-yu/Dynamo/comments{/number}","issue_comment_url":"https://api.github.com/repos/ke-yu/Dynamo/issues/comments{/number}","contents_url":"https://api.github.com/repos/ke-yu/Dynamo/contents/{+path}","compare_url":"https://api.github.com/repos/ke-yu/Dynamo/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ke-yu/Dynamo/merges","archive_url":"https://api.github.com/repos/ke-yu/Dynamo/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ke-yu/Dynamo/downloads","issues_url":"https://api.github.com/repos/ke-yu/Dynamo/issues{/number}","pulls_url":"https://api.github.com/repos/ke-yu/Dynamo/pulls{/number}","milestones_url":"https://api.github.com/repos/ke-yu/Dynamo/milestones{/number}","notifications_url":"https://api.github.com/repos/ke-yu/Dynamo/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ke-yu/Dynamo/labels{/name}","releases_url":"https://api.github.com/repos/ke-yu/Dynamo/releases{/id}","created_at":"2014-03-31T16:53:50Z","updated_at":"2014-06-26T05:45:55Z","pushed_at":"2015-05-15T03:24:09Z","git_url":"git://github.com/ke-yu/Dynamo.git","ssh_url":"git@github.com:ke-yu/Dynamo.git","clone_url":"https://github.com/ke-yu/Dynamo.git","svn_url":"https://github.com/ke-yu/Dynamo","homepage":"http://dynamobim.org","size":687807,"stargazers_count":0,"watchers_count":0,"language":"C#","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"DynamoDS:master","ref":"master","sha":"8bd54e24afc4cc681646337ed9a7e98b485e2d78","user":{"login":"DynamoDS","id":6528209,"avatar_url":"https://avatars.githubusercontent.com/u/6528209?v=3","gravatar_id":"","url":"https://api.github.com/users/DynamoDS","html_url":"https://github.com/DynamoDS","followers_url":"https://api.github.com/users/DynamoDS/followers","following_url":"https://api.github.com/users/DynamoDS/following{/other_user}","gists_url":"https://api.github.com/users/DynamoDS/gists{/gist_id}","starred_url":"https://api.github.com/users/DynamoDS/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/DynamoDS/subscriptions","organizations_url":"https://api.github.com/users/DynamoDS/orgs","repos_url":"https://api.github.com/users/DynamoDS/repos","events_url":"https://api.github.com/users/DynamoDS/events{/privacy}","received_events_url":"https://api.github.com/users/DynamoDS/received_events","type":"Organization","site_admin":false},"repo":{"id":3395179,"name":"Dynamo","full_name":"DynamoDS/Dynamo","owner":{"login":"DynamoDS","id":6528209,"avatar_url":"https://avatars.githubusercontent.com/u/6528209?v=3","gravatar_id":"","url":"https://api.github.com/users/DynamoDS","html_url":"https://github.com/DynamoDS","followers_url":"https://api.github.com/users/DynamoDS/followers","following_url":"https://api.github.com/users/DynamoDS/following{/other_user}","gists_url":"https://api.github.com/users/DynamoDS/gists{/gist_id}","starred_url":"https://api.github.com/users/DynamoDS/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/DynamoDS/subscriptions","organizations_url":"https://api.github.com/users/DynamoDS/orgs","repos_url":"https://api.github.com/users/DynamoDS/repos","events_url":"https://api.github.com/users/DynamoDS/events{/privacy}","received_events_url":"https://api.github.com/users/DynamoDS/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/DynamoDS/Dynamo","description":"Visual Programming","fork":false,"url":"https://api.github.com/repos/DynamoDS/Dynamo","forks_url":"https://api.github.com/repos/DynamoDS/Dynamo/forks","keys_url":"https://api.github.com/repos/DynamoDS/Dynamo/keys{/key_id}","collaborators_url":"https://api.github.com/repos/DynamoDS/Dynamo/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/DynamoDS/Dynamo/teams","hooks_url":"https://api.github.com/repos/DynamoDS/Dynamo/hooks","issue_events_url":"https://api.github.com/repos/DynamoDS/Dynamo/issues/events{/number}","events_url":"https://api.github.com/repos/DynamoDS/Dynamo/events","assignees_url":"https://api.github.com/repos/DynamoDS/Dynamo/assignees{/user}","branches_url":"https://api.github.com/repos/DynamoDS/Dynamo/branches{/branch}","tags_url":"https://api.github.com/repos/DynamoDS/Dynamo/tags","blobs_url":"https://api.github.com/repos/DynamoDS/Dynamo/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/DynamoDS/Dynamo/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/DynamoDS/Dynamo/git/refs{/sha}","trees_url":"https://api.github.com/repos/DynamoDS/Dynamo/git/trees{/sha}","statuses_url":"https://api.github.com/repos/DynamoDS/Dynamo/statuses/{sha}","languages_url":"https://api.github.com/repos/DynamoDS/Dynamo/languages","stargazers_url":"https://api.github.com/repos/DynamoDS/Dynamo/stargazers","contributors_url":"https://api.github.com/repos/DynamoDS/Dynamo/contributors","subscribers_url":"https://api.github.com/repos/DynamoDS/Dynamo/subscribers","subscription_url":"https://api.github.com/repos/DynamoDS/Dynamo/subscription","commits_url":"https://api.github.com/repos/DynamoDS/Dynamo/commits{/sha}","git_commits_url":"https://api.github.com/repos/DynamoDS/Dynamo/git/commits{/sha}","comments_url":"https://api.github.com/repos/DynamoDS/Dynamo/comments{/number}","issue_comment_url":"https://api.github.com/repos/DynamoDS/Dynamo/issues/comments{/number}","contents_url":"https://api.github.com/repos/DynamoDS/Dynamo/contents/{+path}","compare_url":"https://api.github.com/repos/DynamoDS/Dynamo/compare/{base}...{head}","merges_url":"https://api.github.com/repos/DynamoDS/Dynamo/merges","archive_url":"https://api.github.com/repos/DynamoDS/Dynamo/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/DynamoDS/Dynamo/downloads","issues_url":"https://api.github.com/repos/DynamoDS/Dynamo/issues{/number}","pulls_url":"https://api.github.com/repos/DynamoDS/Dynamo/pulls{/number}","milestones_url":"https://api.github.com/repos/DynamoDS/Dynamo/milestones{/number}","notifications_url":"https://api.github.com/repos/DynamoDS/Dynamo/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/DynamoDS/Dynamo/labels{/name}","releases_url":"https://api.github.com/repos/DynamoDS/Dynamo/releases{/id}","created_at":"2012-02-09T07:35:33Z","updated_at":"2015-05-13T10:35:29Z","pushed_at":"2015-05-15T03:51:15Z","git_url":"git://github.com/DynamoDS/Dynamo.git","ssh_url":"git@github.com:DynamoDS/Dynamo.git","clone_url":"https://github.com/DynamoDS/Dynamo.git","svn_url":"https://github.com/DynamoDS/Dynamo","homepage":"http://dynamobim.org","size":941733,"stargazers_count":220,"watchers_count":220,"language":"C#","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":162,"mirror_url":null,"open_issues_count":607,"forks":162,"open_issues":607,"watchers":220,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/DynamoDS/Dynamo/pulls/4478"},"html":{"href":"https://github.com/DynamoDS/Dynamo/pull/4478"},"issue":{"href":"https://api.github.com/repos/DynamoDS/Dynamo/issues/4478"},"comments":{"href":"https://api.github.com/repos/DynamoDS/Dynamo/issues/4478/comments"},"review_comments":{"href":"https://api.github.com/repos/DynamoDS/Dynamo/pulls/4478/comments"},"review_comment":{"href":"https://api.github.com/repos/DynamoDS/Dynamo/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/DynamoDS/Dynamo/pulls/4478/commits"},"statuses":{"href":"https://api.github.com/repos/DynamoDS/Dynamo/statuses/531b811840934c6d7fe30d414e295fd233084fa8"}}}}