{"action":"created","issue":{"url":"https://api.github.com/repos/iamgreaser/iceball/issues/231","labels_url":"https://api.github.com/repos/iamgreaser/iceball/issues/231/labels{/name}","comments_url":"https://api.github.com/repos/iamgreaser/iceball/issues/231/comments","events_url":"https://api.github.com/repos/iamgreaser/iceball/issues/231/events","html_url":"https://github.com/iamgreaser/iceball/issues/231","id":124767920,"number":231,"title":"Automatically create needed directories recursively","user":{"login":"fkaa","id":768574,"avatar_url":"https://avatars.githubusercontent.com/u/768574?v=3","gravatar_id":"","url":"https://api.github.com/users/fkaa","html_url":"https://github.com/fkaa","followers_url":"https://api.github.com/users/fkaa/followers","following_url":"https://api.github.com/users/fkaa/following{/other_user}","gists_url":"https://api.github.com/users/fkaa/gists{/gist_id}","starred_url":"https://api.github.com/users/fkaa/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fkaa/subscriptions","organizations_url":"https://api.github.com/users/fkaa/orgs","repos_url":"https://api.github.com/users/fkaa/repos","events_url":"https://api.github.com/users/fkaa/events{/privacy}","received_events_url":"https://api.github.com/users/fkaa/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/iamgreaser/iceball/labels/A-deploy","name":"A-deploy","color":"fbca04"},{"url":"https://api.github.com/repos/iamgreaser/iceball/labels/E-easy","name":"E-easy","color":"009800"},{"url":"https://api.github.com/repos/iamgreaser/iceball/labels/I-enhancement","name":"I-enhancement","color":"006b75"}],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":11,"created_at":"2016-01-04T14:25:23Z","updated_at":"2016-01-11T18:49:59Z","closed_at":null,"body":"Currently we need to have `.dummy` files to preserve the directory structure. It would be more safe & robust if we had a function called `mkdir_recursive` which could take a path and `mkdir` every directory in it.\r\n\r\nFor example:\r\n```C\r\nmkdir_recursive(\"clsave/vol/screenshots\");\r\n```\r\n\r\nWill create the following directories if they do not exist:\r\n* `clsave/`\r\n* `clsave/vol/`\r\n* `clsave/vol/screenshots/`\r\n\r\nWe could also do this to file write functions (the path given would be recursively created before opening and writing to file)."},"comment":{"url":"https://api.github.com/repos/iamgreaser/iceball/issues/comments/170650469","html_url":"https://github.com/iamgreaser/iceball/issues/231#issuecomment-170650469","issue_url":"https://api.github.com/repos/iamgreaser/iceball/issues/231","id":170650469,"user":{"login":"rakiru","id":569238,"avatar_url":"https://avatars.githubusercontent.com/u/569238?v=3","gravatar_id":"","url":"https://api.github.com/users/rakiru","html_url":"https://github.com/rakiru","followers_url":"https://api.github.com/users/rakiru/followers","following_url":"https://api.github.com/users/rakiru/following{/other_user}","gists_url":"https://api.github.com/users/rakiru/gists{/gist_id}","starred_url":"https://api.github.com/users/rakiru/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rakiru/subscriptions","organizations_url":"https://api.github.com/users/rakiru/orgs","repos_url":"https://api.github.com/users/rakiru/repos","events_url":"https://api.github.com/users/rakiru/events{/privacy}","received_events_url":"https://api.github.com/users/rakiru/received_events","type":"User","site_admin":false},"created_at":"2016-01-11T18:49:59Z","updated_at":"2016-01-11T18:49:59Z","body":"Yeah, the current way isn't great, but I'm not convinced it needs completely replaced, rather than just fixed up a bit. It seems like we'd be disabling the majority of PhysicsFS (zip/etc. support, search paths) just to get better path sanitisation. Pre-tested code that we know should work with unicode filenames and across all common systems is always nice, but it's yet another dependency.\r\n\r\nRegarding server/client stuff, I'm not sure what you mean about `exec`; it's just certain parts of the code loading local models if they exist, otherwise requesting them from the server. I was mostly thinking aloud there, it doesn't really matter."}}