{"action":"opened","number":509,"pull_request":{"url":"https://api.github.com/repos/izpack/izpack/pulls/509","id":70511721,"html_url":"https://github.com/izpack/izpack/pull/509","diff_url":"https://github.com/izpack/izpack/pull/509.diff","patch_url":"https://github.com/izpack/izpack/pull/509.patch","issue_url":"https://api.github.com/repos/izpack/izpack/issues/509","number":509,"state":"open","locked":false,"title":"IZPACK-1406:  Preorder dynamic variables according to references among them at compile time","user":{"login":"rkrell","id":202983,"avatar_url":"https://avatars.githubusercontent.com/u/202983?v=3","gravatar_id":"","url":"https://api.github.com/users/rkrell","html_url":"https://github.com/rkrell","followers_url":"https://api.github.com/users/rkrell/followers","following_url":"https://api.github.com/users/rkrell/following{/other_user}","gists_url":"https://api.github.com/users/rkrell/gists{/gist_id}","starred_url":"https://api.github.com/users/rkrell/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rkrell/subscriptions","organizations_url":"https://api.github.com/users/rkrell/orgs","repos_url":"https://api.github.com/users/rkrell/repos","events_url":"https://api.github.com/users/rkrell/events{/privacy}","received_events_url":"https://api.github.com/users/rkrell/received_events","type":"User","site_admin":false},"body":"This is an implementation of [IZPACK-1406](https://izpack.atlassian.net/browse/IZPACK-1406):\r\n\r\nAt the moment, there are dynamic variables saved as lists of a DynamicVariable list for one variable name, without considering references among them (unresolved values _${...}_ as part of a variable defintion) referring to another dynamic variable. To make the resolving as most complete as possible, dynamic variables are resolved in a maximum number of cycles.\r\n\r\nTo optimize this, could be done the following changes:\r\n- Analyze the direct value references between variables and pre-order them at compile time using a directed graph and breadth-first search, so that the variables dependent on \"others\" are shifted after the \"others\". The result is a pre-ordered list of dynamic variables compiled-in to the installer. Cycles should not be a problem, there should been left unresolved variables in this case (example: _a=\\b\\, b={a}_ -> _a=={b}, b==\\b\\_ ).\r\n- Simplify the DefaultVariables implementation by relying on pre-ordering of the dynamic variables as provided by the list compiled in. This means especially resolving them in one cycle instead of repeating resolving several times. This could also improve the performance of variable resolution especially for installers having a big set of variables accessing files.\r\n- During compiling, there could be overgiven a `List<DynamicVariable>` instead of `Map<String, List<DynamicVariable>>` to the installer a serialized object.","created_at":"2016-05-18T11:33:18Z","updated_at":"2016-05-18T11:33:18Z","closed_at":null,"merged_at":null,"merge_commit_sha":null,"assignee":{"login":"rkrell","id":202983,"avatar_url":"https://avatars.githubusercontent.com/u/202983?v=3","gravatar_id":"","url":"https://api.github.com/users/rkrell","html_url":"https://github.com/rkrell","followers_url":"https://api.github.com/users/rkrell/followers","following_url":"https://api.github.com/users/rkrell/following{/other_user}","gists_url":"https://api.github.com/users/rkrell/gists{/gist_id}","starred_url":"https://api.github.com/users/rkrell/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rkrell/subscriptions","organizations_url":"https://api.github.com/users/rkrell/orgs","repos_url":"https://api.github.com/users/rkrell/repos","events_url":"https://api.github.com/users/rkrell/events{/privacy}","received_events_url":"https://api.github.com/users/rkrell/received_events","type":"User","site_admin":false},"milestone":{"url":"https://api.github.com/repos/izpack/izpack/milestones/14","html_url":"https://github.com/izpack/izpack/milestones/5.0.9","labels_url":"https://api.github.com/repos/izpack/izpack/milestones/14/labels","id":1716472,"number":14,"title":"5.0.9","description":null,"creator":{"login":"rkrell","id":202983,"avatar_url":"https://avatars.githubusercontent.com/u/202983?v=3","gravatar_id":"","url":"https://api.github.com/users/rkrell","html_url":"https://github.com/rkrell","followers_url":"https://api.github.com/users/rkrell/followers","following_url":"https://api.github.com/users/rkrell/following{/other_user}","gists_url":"https://api.github.com/users/rkrell/gists{/gist_id}","starred_url":"https://api.github.com/users/rkrell/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rkrell/subscriptions","organizations_url":"https://api.github.com/users/rkrell/orgs","repos_url":"https://api.github.com/users/rkrell/repos","events_url":"https://api.github.com/users/rkrell/events{/privacy}","received_events_url":"https://api.github.com/users/rkrell/received_events","type":"User","site_admin":false},"open_issues":1,"closed_issues":9,"state":"open","created_at":"2016-04-19T08:31:47Z","updated_at":"2016-05-18T11:33:18Z","due_on":null,"closed_at":null},"commits_url":"https://api.github.com/repos/izpack/izpack/pulls/509/commits","review_comments_url":"https://api.github.com/repos/izpack/izpack/pulls/509/comments","review_comment_url":"https://api.github.com/repos/izpack/izpack/pulls/comments{/number}","comments_url":"https://api.github.com/repos/izpack/izpack/issues/509/comments","statuses_url":"https://api.github.com/repos/izpack/izpack/statuses/4018a6e7a588a5e50a4c5fefc01aa2668381bda9","head":{"label":"rkrell:IZPACK-1406","ref":"IZPACK-1406","sha":"4018a6e7a588a5e50a4c5fefc01aa2668381bda9","user":{"login":"rkrell","id":202983,"avatar_url":"https://avatars.githubusercontent.com/u/202983?v=3","gravatar_id":"","url":"https://api.github.com/users/rkrell","html_url":"https://github.com/rkrell","followers_url":"https://api.github.com/users/rkrell/followers","following_url":"https://api.github.com/users/rkrell/following{/other_user}","gists_url":"https://api.github.com/users/rkrell/gists{/gist_id}","starred_url":"https://api.github.com/users/rkrell/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rkrell/subscriptions","organizations_url":"https://api.github.com/users/rkrell/orgs","repos_url":"https://api.github.com/users/rkrell/repos","events_url":"https://api.github.com/users/rkrell/events{/privacy}","received_events_url":"https://api.github.com/users/rkrell/received_events","type":"User","site_admin":false},"repo":{"id":5110818,"name":"izpack","full_name":"rkrell/izpack","owner":{"login":"rkrell","id":202983,"avatar_url":"https://avatars.githubusercontent.com/u/202983?v=3","gravatar_id":"","url":"https://api.github.com/users/rkrell","html_url":"https://github.com/rkrell","followers_url":"https://api.github.com/users/rkrell/followers","following_url":"https://api.github.com/users/rkrell/following{/other_user}","gists_url":"https://api.github.com/users/rkrell/gists{/gist_id}","starred_url":"https://api.github.com/users/rkrell/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rkrell/subscriptions","organizations_url":"https://api.github.com/users/rkrell/orgs","repos_url":"https://api.github.com/users/rkrell/repos","events_url":"https://api.github.com/users/rkrell/events{/privacy}","received_events_url":"https://api.github.com/users/rkrell/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/rkrell/izpack","description":"IzPack - Package Once. Deploy Everywhere.","fork":true,"url":"https://api.github.com/repos/rkrell/izpack","forks_url":"https://api.github.com/repos/rkrell/izpack/forks","keys_url":"https://api.github.com/repos/rkrell/izpack/keys{/key_id}","collaborators_url":"https://api.github.com/repos/rkrell/izpack/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/rkrell/izpack/teams","hooks_url":"https://api.github.com/repos/rkrell/izpack/hooks","issue_events_url":"https://api.github.com/repos/rkrell/izpack/issues/events{/number}","events_url":"https://api.github.com/repos/rkrell/izpack/events","assignees_url":"https://api.github.com/repos/rkrell/izpack/assignees{/user}","branches_url":"https://api.github.com/repos/rkrell/izpack/branches{/branch}","tags_url":"https://api.github.com/repos/rkrell/izpack/tags","blobs_url":"https://api.github.com/repos/rkrell/izpack/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/rkrell/izpack/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/rkrell/izpack/git/refs{/sha}","trees_url":"https://api.github.com/repos/rkrell/izpack/git/trees{/sha}","statuses_url":"https://api.github.com/repos/rkrell/izpack/statuses/{sha}","languages_url":"https://api.github.com/repos/rkrell/izpack/languages","stargazers_url":"https://api.github.com/repos/rkrell/izpack/stargazers","contributors_url":"https://api.github.com/repos/rkrell/izpack/contributors","subscribers_url":"https://api.github.com/repos/rkrell/izpack/subscribers","subscription_url":"https://api.github.com/repos/rkrell/izpack/subscription","commits_url":"https://api.github.com/repos/rkrell/izpack/commits{/sha}","git_commits_url":"https://api.github.com/repos/rkrell/izpack/git/commits{/sha}","comments_url":"https://api.github.com/repos/rkrell/izpack/comments{/number}","issue_comment_url":"https://api.github.com/repos/rkrell/izpack/issues/comments{/number}","contents_url":"https://api.github.com/repos/rkrell/izpack/contents/{+path}","compare_url":"https://api.github.com/repos/rkrell/izpack/compare/{base}...{head}","merges_url":"https://api.github.com/repos/rkrell/izpack/merges","archive_url":"https://api.github.com/repos/rkrell/izpack/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/rkrell/izpack/downloads","issues_url":"https://api.github.com/repos/rkrell/izpack/issues{/number}","pulls_url":"https://api.github.com/repos/rkrell/izpack/pulls{/number}","milestones_url":"https://api.github.com/repos/rkrell/izpack/milestones{/number}","notifications_url":"https://api.github.com/repos/rkrell/izpack/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/rkrell/izpack/labels{/name}","releases_url":"https://api.github.com/repos/rkrell/izpack/releases{/id}","deployments_url":"https://api.github.com/repos/rkrell/izpack/deployments","created_at":"2012-07-19T14:10:55Z","updated_at":"2015-05-14T10:24:39Z","pushed_at":"2016-05-18T11:29:56Z","git_url":"git://github.com/rkrell/izpack.git","ssh_url":"git@github.com:rkrell/izpack.git","clone_url":"https://github.com/rkrell/izpack.git","svn_url":"https://github.com/rkrell/izpack","homepage":"http://izpack.org/","size":43552,"stargazers_count":1,"watchers_count":1,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":0,"forks":1,"open_issues":0,"watchers":1,"default_branch":"master"}},"base":{"label":"izpack:master","ref":"master","sha":"2d92834850a0933d3f854edef00e8f257e8ded4a","user":{"login":"izpack","id":1826094,"avatar_url":"https://avatars.githubusercontent.com/u/1826094?v=3","gravatar_id":"","url":"https://api.github.com/users/izpack","html_url":"https://github.com/izpack","followers_url":"https://api.github.com/users/izpack/followers","following_url":"https://api.github.com/users/izpack/following{/other_user}","gists_url":"https://api.github.com/users/izpack/gists{/gist_id}","starred_url":"https://api.github.com/users/izpack/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/izpack/subscriptions","organizations_url":"https://api.github.com/users/izpack/orgs","repos_url":"https://api.github.com/users/izpack/repos","events_url":"https://api.github.com/users/izpack/events{/privacy}","received_events_url":"https://api.github.com/users/izpack/received_events","type":"Organization","site_admin":false},"repo":{"id":4624165,"name":"izpack","full_name":"izpack/izpack","owner":{"login":"izpack","id":1826094,"avatar_url":"https://avatars.githubusercontent.com/u/1826094?v=3","gravatar_id":"","url":"https://api.github.com/users/izpack","html_url":"https://github.com/izpack","followers_url":"https://api.github.com/users/izpack/followers","following_url":"https://api.github.com/users/izpack/following{/other_user}","gists_url":"https://api.github.com/users/izpack/gists{/gist_id}","starred_url":"https://api.github.com/users/izpack/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/izpack/subscriptions","organizations_url":"https://api.github.com/users/izpack/orgs","repos_url":"https://api.github.com/users/izpack/repos","events_url":"https://api.github.com/users/izpack/events{/privacy}","received_events_url":"https://api.github.com/users/izpack/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/izpack/izpack","description":"IzPack - Package Once. Deploy Everywhere.","fork":true,"url":"https://api.github.com/repos/izpack/izpack","forks_url":"https://api.github.com/repos/izpack/izpack/forks","keys_url":"https://api.github.com/repos/izpack/izpack/keys{/key_id}","collaborators_url":"https://api.github.com/repos/izpack/izpack/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/izpack/izpack/teams","hooks_url":"https://api.github.com/repos/izpack/izpack/hooks","issue_events_url":"https://api.github.com/repos/izpack/izpack/issues/events{/number}","events_url":"https://api.github.com/repos/izpack/izpack/events","assignees_url":"https://api.github.com/repos/izpack/izpack/assignees{/user}","branches_url":"https://api.github.com/repos/izpack/izpack/branches{/branch}","tags_url":"https://api.github.com/repos/izpack/izpack/tags","blobs_url":"https://api.github.com/repos/izpack/izpack/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/izpack/izpack/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/izpack/izpack/git/refs{/sha}","trees_url":"https://api.github.com/repos/izpack/izpack/git/trees{/sha}","statuses_url":"https://api.github.com/repos/izpack/izpack/statuses/{sha}","languages_url":"https://api.github.com/repos/izpack/izpack/languages","stargazers_url":"https://api.github.com/repos/izpack/izpack/stargazers","contributors_url":"https://api.github.com/repos/izpack/izpack/contributors","subscribers_url":"https://api.github.com/repos/izpack/izpack/subscribers","subscription_url":"https://api.github.com/repos/izpack/izpack/subscription","commits_url":"https://api.github.com/repos/izpack/izpack/commits{/sha}","git_commits_url":"https://api.github.com/repos/izpack/izpack/git/commits{/sha}","comments_url":"https://api.github.com/repos/izpack/izpack/comments{/number}","issue_comment_url":"https://api.github.com/repos/izpack/izpack/issues/comments{/number}","contents_url":"https://api.github.com/repos/izpack/izpack/contents/{+path}","compare_url":"https://api.github.com/repos/izpack/izpack/compare/{base}...{head}","merges_url":"https://api.github.com/repos/izpack/izpack/merges","archive_url":"https://api.github.com/repos/izpack/izpack/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/izpack/izpack/downloads","issues_url":"https://api.github.com/repos/izpack/izpack/issues{/number}","pulls_url":"https://api.github.com/repos/izpack/izpack/pulls{/number}","milestones_url":"https://api.github.com/repos/izpack/izpack/milestones{/number}","notifications_url":"https://api.github.com/repos/izpack/izpack/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/izpack/izpack/labels{/name}","releases_url":"https://api.github.com/repos/izpack/izpack/releases{/id}","deployments_url":"https://api.github.com/repos/izpack/izpack/deployments","created_at":"2012-06-11T11:35:57Z","updated_at":"2016-04-08T15:46:50Z","pushed_at":"2016-05-18T10:38:51Z","git_url":"git://github.com/izpack/izpack.git","ssh_url":"git@github.com:izpack/izpack.git","clone_url":"https://github.com/izpack/izpack.git","svn_url":"https://github.com/izpack/izpack","homepage":"http://izpack.org/","size":46227,"stargazers_count":110,"watchers_count":110,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":131,"mirror_url":null,"open_issues_count":1,"forks":131,"open_issues":1,"watchers":110,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/izpack/izpack/pulls/509"},"html":{"href":"https://github.com/izpack/izpack/pull/509"},"issue":{"href":"https://api.github.com/repos/izpack/izpack/issues/509"},"comments":{"href":"https://api.github.com/repos/izpack/izpack/issues/509/comments"},"review_comments":{"href":"https://api.github.com/repos/izpack/izpack/pulls/509/comments"},"review_comment":{"href":"https://api.github.com/repos/izpack/izpack/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/izpack/izpack/pulls/509/commits"},"statuses":{"href":"https://api.github.com/repos/izpack/izpack/statuses/4018a6e7a588a5e50a4c5fefc01aa2668381bda9"}},"merged":false,"mergeable":null,"mergeable_state":"unknown","merged_by":null,"comments":0,"review_comments":0,"commits":2,"additions":668,"deletions":560,"changed_files":19}}