{"action":"created","comment":{"url":"https://api.github.com/repos/qorelanguage/qore/pulls/comments/217714432","pull_request_review_id":155497213,"id":217714432,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIxNzcxNDQzMg==","diff_hunk":"@@ -0,0 +1,750 @@\n+# -*- mode: qore; indent-tabs-mode: nil -*-\n+# @file FsUtil.qm Qore user module providing file system related functionality\n+\n+/*  FsUtil.qm Copyright 2018 Qore Technologies, s.r.o.\n+\n+    Permission is hereby granted, free of charge, to any person obtaining a\n+    copy of this software and associated documentation files (the \"Software\"),\n+    to deal in the Software without restriction, including without limitation\n+    the rights to use, copy, modify, merge, publish, distribute, sublicense,\n+    and/or sell copies of the Software, and to permit persons to whom the\n+    Software is furnished to do so, subject to the following conditions:\n+\n+    The above copyright notice and this permission notice shall be included in\n+    all copies or substantial portions of the Software.\n+\n+    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n+    DEALINGS IN THE SOFTWARE.\n+*/\n+\n+# minimum required Qore version\n+%requires qore >= 0.8.13\n+\n+%requires Util\n+\n+# assume local var scope, do not use \"$\" for vars, members, and method calls\n+%new-style\n+%strict-args\n+%require-types\n+%enable-all-warnings\n+\n+module FsUtil {\n+    version = \"1.0\";\n+    desc = \"user module providing file system related functionality\";\n+    author = \"Tomas Heger\";\n+    url = \"http://qore.org\";\n+    license = \"MIT\";\n+    init    = sub () { init(); };\n+}\n+\n+/* see release notes below for version history\n+*/\n+\n+/** @mainpage FsUtil Module\n+\n+    @tableofcontents\n+\n+    @section fsutilintro Introduction to the FsUtil Module\n+\n+    The %FsUtil module provides functionality for file system operations.\n+\n+    To use this module, use \\c \"%requires FsUtil\" in your code.\n+\n+    All the public symbols in the module are defined in the FsUtil namespace\n+\n+    Currently the module provides the following multiplatform functions:\n+    @ref FsUtil::basename_ext()\n+    @ref FsUtil::copy_file()\n+    @ref FsUtil::copy_file_obj()\n+    @ref FsUtil::copy_path()\n+    @ref FsUtil::copy_tree()\n+    @ref FsUtil::join_paths()\n+    @ref FsUtil::make_tmp_dir()\n+    @ref FsUtil::make_tmp_file()\n+    @ref FsUtil::path_exists()\n+    @ref FsUtil::remove_file()\n+    @ref FsUtil::remove_path()\n+    @ref FsUtil::remove_tree()\n+    @ref FsUtil::same_file()\n+    @ref FsUtil::same_file_stat()\n+\n+    Also classes for platform specific operations are available:\n+    @ref FsUtil::PosixPathHandler\n+    @ref FsUtil::WinPathHandler\n+\n+    @section fsutil_relnotes Release Notes\n+\n+    @subsection fsutil_v1_0 Version 1.0\n+    - initial version of module\n+*/\n+\n+namespace Init {\n+\n+    sub init() {\n+        #! handler for the current platform\n+        our FsUtil::PathHandler local_handler;\n+        if (Platform.Windows)\n+            local_handler = new FsUtil::WinPathHandler();\n+        else if (Platform.Unix)\n+            local_handler = new FsUtil::PosixPathHandler();\n+        else\n+            throw \"UNKNOWN-PLATFORM-ERROR\",\n+                  sprintf(\"Unknown platform: %s.\\n\", PlatformOS);\n+    }\n+}\n+\n+#! the FsUtil namespace contains all the objects in the FsUtil module\n+public namespace FsUtil {\n+\n+    #! generic path handler implementing functionality common for both platforms\n+    class PathHandler {\n+        public {\n+            #! path delimiters - to be set by platform specific path handlers\n+            list<string> Delimiters;\n+        }\n+\n+\n+        public string join_paths(list<string> paths) {\n+            if (!paths) {\n+                # NOTHING or an empty list\n+                throw \"MISSING-PARAMETER-ERROR\", \"No paths to join\";\n+            }\n+\n+            if (paths.size() == 1) {\n+                # nothing to join, return the only path part given\n+                return paths[0];\n+            }\n+\n+            return self.join_paths(paths[0], paths[1..]);\n+        }\n+\n+        # to be implemented by platform-specific classes\n+        public abstract string join_paths(string path1, softlist<string> paths);\n+    }\n+\n+    #! path handler implementing Windows specific functionality\n+    public class WinPathHandler inherits PathHandler {\n+\n+        #! creates the object and sets the delimiter\n+        constructor() {\n+            # both slashes can be used as path delimiters on Windows\n+            Delimiters = (\"\\\\\", \"/\");\n+        }\n+\n+        #! separates and returns the drive and the rest of the path\n+        /** @param path the path to be processed\n+\n+            @return list<string> of two items - drive and the rest of the path, either can be empty and concatenation of\n+            both parts always gives the original path back.\n+        */\n+        public list<string> split_drive(string path) {\n+            if (regex(path, '^[a-zA-Z]:'))\n+                return (path.substr(0,2), path.substr(2));\n+            return (\"\", path);\n+        }\n+\n+        #! Returns path resulting from joining the given paths\n+        /** @param path1 the first part of the path\n+            @param paths the other parts of the path\n+\n+            @return all paths joined into one valid path (i.e. delimiters are added/removed as needed) except for cases\n+            when one of the paths (in the list) is an absolute path or if each path is on different drive - in such\n+            cases that path is considered a new start of the resulting path. The resulting path is not normalized\n+            (i.e. \"/path/to/../../file.txt\" is a correct result of join(\"/path/to\", \"../../file.txt\");).\n+            Since the second parameter is a softlist, this variant also works for joining two string paths.\n+        */\n+        public string join_paths(string path1, softlist<string> paths) {\n+            string result = path1;\n+\n+            foreach string path2 in (paths) {\n+                if (path2 == \"\") {\n+                    continue;\n+                }\n+\n+                # extract drive (if present)\n+                list<string> result_split = split_drive(result);\n+                list<string> path2_split = split_drive(path2);\n+\n+                if (result == \"\" ||\n+                    absolute_path_windows(path2) ||\n+                    (path2_split[0] != \"\" && toupper(result_split[0]) != toupper(path2_split[0]))) {\n+                    # if the first path is empty or\n+                    # if the second path is absolute or\n+                    # if both paths contain drive and the drives differ,\n+                    # then use path2 only\n+                    result = path2;\n+                    continue;\n+                }\n+\n+                # otherwise let's join both parts and return\n+                if (result_split[1] != \"\" && !inlist(result[-1], self.Delimiters)) {\n+                    result += self.Delimiters[0];\n+                }\n+                result = result + path2_split[1];\n+            }\n+\n+            return result;\n+        }\n+    }\n+\n+    #! path handler implementing POSIX specific functionality\n+    public class PosixPathHandler inherits PathHandler {\n+\n+        #! creates the object and sets the delimiter\n+        constructor() {\n+            Delimiters = (\"/\",);\n+        }\n+\n+        #! Returns path resulting from joining the given paths\n+        /** @param path1 the first part of the path\n+            @param paths the other parts of the path\n+\n+            @return @return all paths joined into one valid path (i.e. delimiters are added/removed as needed) except","path":"qlib/FsUtil.qm","position":207,"original_position":207,"commit_id":"2933dd2e7af7eadd376409aca78e37751318884a","original_commit_id":"ca9bec5d289a92d54edf9bb6cdded7b0dc5d149f","user":{"login":"geckon","id":120788,"node_id":"MDQ6VXNlcjEyMDc4OA==","avatar_url":"https://avatars1.githubusercontent.com/u/120788?v=4","gravatar_id":"","url":"https://api.github.com/users/geckon","html_url":"https://github.com/geckon","followers_url":"https://api.github.com/users/geckon/followers","following_url":"https://api.github.com/users/geckon/following{/other_user}","gists_url":"https://api.github.com/users/geckon/gists{/gist_id}","starred_url":"https://api.github.com/users/geckon/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/geckon/subscriptions","organizations_url":"https://api.github.com/users/geckon/orgs","repos_url":"https://api.github.com/users/geckon/repos","events_url":"https://api.github.com/users/geckon/events{/privacy}","received_events_url":"https://api.github.com/users/geckon/received_events","type":"User","site_admin":false},"body":"Nice catch, fixed.","created_at":"2018-09-14T13:35:16Z","updated_at":"2018-09-14T13:35:17Z","html_url":"https://github.com/qorelanguage/qore/pull/2976#discussion_r217714432","pull_request_url":"https://api.github.com/repos/qorelanguage/qore/pulls/2976","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/qorelanguage/qore/pulls/comments/217714432"},"html":{"href":"https://github.com/qorelanguage/qore/pull/2976#discussion_r217714432"},"pull_request":{"href":"https://api.github.com/repos/qorelanguage/qore/pulls/2976"}},"in_reply_to_id":217625023},"pull_request":{"url":"https://api.github.com/repos/qorelanguage/qore/pulls/2976","id":212867237,"node_id":"MDExOlB1bGxSZXF1ZXN0MjEyODY3MjM3","html_url":"https://github.com/qorelanguage/qore/pull/2976","diff_url":"https://github.com/qorelanguage/qore/pull/2976.diff","patch_url":"https://github.com/qorelanguage/qore/pull/2976.patch","issue_url":"https://api.github.com/repos/qorelanguage/qore/issues/2976","number":2976,"state":"open","locked":false,"title":"Feature/2000 filesystem module","user":{"login":"geckon","id":120788,"node_id":"MDQ6VXNlcjEyMDc4OA==","avatar_url":"https://avatars1.githubusercontent.com/u/120788?v=4","gravatar_id":"","url":"https://api.github.com/users/geckon","html_url":"https://github.com/geckon","followers_url":"https://api.github.com/users/geckon/followers","following_url":"https://api.github.com/users/geckon/following{/other_user}","gists_url":"https://api.github.com/users/geckon/gists{/gist_id}","starred_url":"https://api.github.com/users/geckon/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/geckon/subscriptions","organizations_url":"https://api.github.com/users/geckon/orgs","repos_url":"https://api.github.com/users/geckon/repos","events_url":"https://api.github.com/users/geckon/events{/privacy}","received_events_url":"https://api.github.com/users/geckon/received_events","type":"User","site_admin":false},"body":"First phase of FS module is ready to be reviewed and merged so @pvanek can continue with the webdav stuff. There are already further ideas for new functions and improvements which can be tracked in issue #2000 or there can be new issues opened. Thanks in advance for reviewing the code.","created_at":"2018-09-04T06:26:08Z","updated_at":"2018-09-14T13:35:17Z","closed_at":null,"merged_at":null,"merge_commit_sha":"76702a1f97685f11abb46f935bda262d481b717c","assignee":{"login":"sejvlond","id":5747824,"node_id":"MDQ6VXNlcjU3NDc4MjQ=","avatar_url":"https://avatars1.githubusercontent.com/u/5747824?v=4","gravatar_id":"","url":"https://api.github.com/users/sejvlond","html_url":"https://github.com/sejvlond","followers_url":"https://api.github.com/users/sejvlond/followers","following_url":"https://api.github.com/users/sejvlond/following{/other_user}","gists_url":"https://api.github.com/users/sejvlond/gists{/gist_id}","starred_url":"https://api.github.com/users/sejvlond/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sejvlond/subscriptions","organizations_url":"https://api.github.com/users/sejvlond/orgs","repos_url":"https://api.github.com/users/sejvlond/repos","events_url":"https://api.github.com/users/sejvlond/events{/privacy}","received_events_url":"https://api.github.com/users/sejvlond/received_events","type":"User","site_admin":false},"assignees":[{"login":"sejvlond","id":5747824,"node_id":"MDQ6VXNlcjU3NDc4MjQ=","avatar_url":"https://avatars1.githubusercontent.com/u/5747824?v=4","gravatar_id":"","url":"https://api.github.com/users/sejvlond","html_url":"https://github.com/sejvlond","followers_url":"https://api.github.com/users/sejvlond/followers","following_url":"https://api.github.com/users/sejvlond/following{/other_user}","gists_url":"https://api.github.com/users/sejvlond/gists{/gist_id}","starred_url":"https://api.github.com/users/sejvlond/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sejvlond/subscriptions","organizations_url":"https://api.github.com/users/sejvlond/orgs","repos_url":"https://api.github.com/users/sejvlond/repos","events_url":"https://api.github.com/users/sejvlond/events{/privacy}","received_events_url":"https://api.github.com/users/sejvlond/received_events","type":"User","site_admin":false}],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/qorelanguage/qore/pulls/2976/commits","review_comments_url":"https://api.github.com/repos/qorelanguage/qore/pulls/2976/comments","review_comment_url":"https://api.github.com/repos/qorelanguage/qore/pulls/comments{/number}","comments_url":"https://api.github.com/repos/qorelanguage/qore/issues/2976/comments","statuses_url":"https://api.github.com/repos/qorelanguage/qore/statuses/2933dd2e7af7eadd376409aca78e37751318884a","head":{"label":"qorelanguage:feature/2000_filesystem_module","ref":"feature/2000_filesystem_module","sha":"2933dd2e7af7eadd376409aca78e37751318884a","user":{"login":"qorelanguage","id":13414799,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEzNDE0Nzk5","avatar_url":"https://avatars2.githubusercontent.com/u/13414799?v=4","gravatar_id":"","url":"https://api.github.com/users/qorelanguage","html_url":"https://github.com/qorelanguage","followers_url":"https://api.github.com/users/qorelanguage/followers","following_url":"https://api.github.com/users/qorelanguage/following{/other_user}","gists_url":"https://api.github.com/users/qorelanguage/gists{/gist_id}","starred_url":"https://api.github.com/users/qorelanguage/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/qorelanguage/subscriptions","organizations_url":"https://api.github.com/users/qorelanguage/orgs","repos_url":"https://api.github.com/users/qorelanguage/repos","events_url":"https://api.github.com/users/qorelanguage/events{/privacy}","received_events_url":"https://api.github.com/users/qorelanguage/received_events","type":"Organization","site_admin":false},"repo":{"id":39378616,"node_id":"MDEwOlJlcG9zaXRvcnkzOTM3ODYxNg==","name":"qore","full_name":"qorelanguage/qore","owner":{"login":"qorelanguage","id":13414799,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEzNDE0Nzk5","avatar_url":"https://avatars2.githubusercontent.com/u/13414799?v=4","gravatar_id":"","url":"https://api.github.com/users/qorelanguage","html_url":"https://github.com/qorelanguage","followers_url":"https://api.github.com/users/qorelanguage/followers","following_url":"https://api.github.com/users/qorelanguage/following{/other_user}","gists_url":"https://api.github.com/users/qorelanguage/gists{/gist_id}","starred_url":"https://api.github.com/users/qorelanguage/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/qorelanguage/subscriptions","organizations_url":"https://api.github.com/users/qorelanguage/orgs","repos_url":"https://api.github.com/users/qorelanguage/repos","events_url":"https://api.github.com/users/qorelanguage/events{/privacy}","received_events_url":"https://api.github.com/users/qorelanguage/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/qorelanguage/qore","description":"Qore Programming Language","fork":false,"url":"https://api.github.com/repos/qorelanguage/qore","forks_url":"https://api.github.com/repos/qorelanguage/qore/forks","keys_url":"https://api.github.com/repos/qorelanguage/qore/keys{/key_id}","collaborators_url":"https://api.github.com/repos/qorelanguage/qore/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/qorelanguage/qore/teams","hooks_url":"https://api.github.com/repos/qorelanguage/qore/hooks","issue_events_url":"https://api.github.com/repos/qorelanguage/qore/issues/events{/number}","events_url":"https://api.github.com/repos/qorelanguage/qore/events","assignees_url":"https://api.github.com/repos/qorelanguage/qore/assignees{/user}","branches_url":"https://api.github.com/repos/qorelanguage/qore/branches{/branch}","tags_url":"https://api.github.com/repos/qorelanguage/qore/tags","blobs_url":"https://api.github.com/repos/qorelanguage/qore/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/qorelanguage/qore/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/qorelanguage/qore/git/refs{/sha}","trees_url":"https://api.github.com/repos/qorelanguage/qore/git/trees{/sha}","statuses_url":"https://api.github.com/repos/qorelanguage/qore/statuses/{sha}","languages_url":"https://api.github.com/repos/qorelanguage/qore/languages","stargazers_url":"https://api.github.com/repos/qorelanguage/qore/stargazers","contributors_url":"https://api.github.com/repos/qorelanguage/qore/contributors","subscribers_url":"https://api.github.com/repos/qorelanguage/qore/subscribers","subscription_url":"https://api.github.com/repos/qorelanguage/qore/subscription","commits_url":"https://api.github.com/repos/qorelanguage/qore/commits{/sha}","git_commits_url":"https://api.github.com/repos/qorelanguage/qore/git/commits{/sha}","comments_url":"https://api.github.com/repos/qorelanguage/qore/comments{/number}","issue_comment_url":"https://api.github.com/repos/qorelanguage/qore/issues/comments{/number}","contents_url":"https://api.github.com/repos/qorelanguage/qore/contents/{+path}","compare_url":"https://api.github.com/repos/qorelanguage/qore/compare/{base}...{head}","merges_url":"https://api.github.com/repos/qorelanguage/qore/merges","archive_url":"https://api.github.com/repos/qorelanguage/qore/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/qorelanguage/qore/downloads","issues_url":"https://api.github.com/repos/qorelanguage/qore/issues{/number}","pulls_url":"https://api.github.com/repos/qorelanguage/qore/pulls{/number}","milestones_url":"https://api.github.com/repos/qorelanguage/qore/milestones{/number}","notifications_url":"https://api.github.com/repos/qorelanguage/qore/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/qorelanguage/qore/labels{/name}","releases_url":"https://api.github.com/repos/qorelanguage/qore/releases{/id}","deployments_url":"https://api.github.com/repos/qorelanguage/qore/deployments","created_at":"2015-07-20T10:52:09Z","updated_at":"2018-09-11T06:09:06Z","pushed_at":"2018-09-14T13:32:46Z","git_url":"git://github.com/qorelanguage/qore.git","ssh_url":"git@github.com:qorelanguage/qore.git","clone_url":"https://github.com/qorelanguage/qore.git","svn_url":"https://github.com/qorelanguage/qore","homepage":null,"size":40281,"stargazers_count":18,"watchers_count":18,"language":"C++","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":6,"mirror_url":null,"archived":false,"open_issues_count":248,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":6,"open_issues":248,"watchers":18,"default_branch":"develop"}},"base":{"label":"qorelanguage:develop","ref":"develop","sha":"dd04c971e7c27e82ff8206e192dcd61a436bb82a","user":{"login":"qorelanguage","id":13414799,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEzNDE0Nzk5","avatar_url":"https://avatars2.githubusercontent.com/u/13414799?v=4","gravatar_id":"","url":"https://api.github.com/users/qorelanguage","html_url":"https://github.com/qorelanguage","followers_url":"https://api.github.com/users/qorelanguage/followers","following_url":"https://api.github.com/users/qorelanguage/following{/other_user}","gists_url":"https://api.github.com/users/qorelanguage/gists{/gist_id}","starred_url":"https://api.github.com/users/qorelanguage/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/qorelanguage/subscriptions","organizations_url":"https://api.github.com/users/qorelanguage/orgs","repos_url":"https://api.github.com/users/qorelanguage/repos","events_url":"https://api.github.com/users/qorelanguage/events{/privacy}","received_events_url":"https://api.github.com/users/qorelanguage/received_events","type":"Organization","site_admin":false},"repo":{"id":39378616,"node_id":"MDEwOlJlcG9zaXRvcnkzOTM3ODYxNg==","name":"qore","full_name":"qorelanguage/qore","owner":{"login":"qorelanguage","id":13414799,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEzNDE0Nzk5","avatar_url":"https://avatars2.githubusercontent.com/u/13414799?v=4","gravatar_id":"","url":"https://api.github.com/users/qorelanguage","html_url":"https://github.com/qorelanguage","followers_url":"https://api.github.com/users/qorelanguage/followers","following_url":"https://api.github.com/users/qorelanguage/following{/other_user}","gists_url":"https://api.github.com/users/qorelanguage/gists{/gist_id}","starred_url":"https://api.github.com/users/qorelanguage/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/qorelanguage/subscriptions","organizations_url":"https://api.github.com/users/qorelanguage/orgs","repos_url":"https://api.github.com/users/qorelanguage/repos","events_url":"https://api.github.com/users/qorelanguage/events{/privacy}","received_events_url":"https://api.github.com/users/qorelanguage/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/qorelanguage/qore","description":"Qore Programming Language","fork":false,"url":"https://api.github.com/repos/qorelanguage/qore","forks_url":"https://api.github.com/repos/qorelanguage/qore/forks","keys_url":"https://api.github.com/repos/qorelanguage/qore/keys{/key_id}","collaborators_url":"https://api.github.com/repos/qorelanguage/qore/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/qorelanguage/qore/teams","hooks_url":"https://api.github.com/repos/qorelanguage/qore/hooks","issue_events_url":"https://api.github.com/repos/qorelanguage/qore/issues/events{/number}","events_url":"https://api.github.com/repos/qorelanguage/qore/events","assignees_url":"https://api.github.com/repos/qorelanguage/qore/assignees{/user}","branches_url":"https://api.github.com/repos/qorelanguage/qore/branches{/branch}","tags_url":"https://api.github.com/repos/qorelanguage/qore/tags","blobs_url":"https://api.github.com/repos/qorelanguage/qore/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/qorelanguage/qore/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/qorelanguage/qore/git/refs{/sha}","trees_url":"https://api.github.com/repos/qorelanguage/qore/git/trees{/sha}","statuses_url":"https://api.github.com/repos/qorelanguage/qore/statuses/{sha}","languages_url":"https://api.github.com/repos/qorelanguage/qore/languages","stargazers_url":"https://api.github.com/repos/qorelanguage/qore/stargazers","contributors_url":"https://api.github.com/repos/qorelanguage/qore/contributors","subscribers_url":"https://api.github.com/repos/qorelanguage/qore/subscribers","subscription_url":"https://api.github.com/repos/qorelanguage/qore/subscription","commits_url":"https://api.github.com/repos/qorelanguage/qore/commits{/sha}","git_commits_url":"https://api.github.com/repos/qorelanguage/qore/git/commits{/sha}","comments_url":"https://api.github.com/repos/qorelanguage/qore/comments{/number}","issue_comment_url":"https://api.github.com/repos/qorelanguage/qore/issues/comments{/number}","contents_url":"https://api.github.com/repos/qorelanguage/qore/contents/{+path}","compare_url":"https://api.github.com/repos/qorelanguage/qore/compare/{base}...{head}","merges_url":"https://api.github.com/repos/qorelanguage/qore/merges","archive_url":"https://api.github.com/repos/qorelanguage/qore/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/qorelanguage/qore/downloads","issues_url":"https://api.github.com/repos/qorelanguage/qore/issues{/number}","pulls_url":"https://api.github.com/repos/qorelanguage/qore/pulls{/number}","milestones_url":"https://api.github.com/repos/qorelanguage/qore/milestones{/number}","notifications_url":"https://api.github.com/repos/qorelanguage/qore/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/qorelanguage/qore/labels{/name}","releases_url":"https://api.github.com/repos/qorelanguage/qore/releases{/id}","deployments_url":"https://api.github.com/repos/qorelanguage/qore/deployments","created_at":"2015-07-20T10:52:09Z","updated_at":"2018-09-11T06:09:06Z","pushed_at":"2018-09-14T13:32:46Z","git_url":"git://github.com/qorelanguage/qore.git","ssh_url":"git@github.com:qorelanguage/qore.git","clone_url":"https://github.com/qorelanguage/qore.git","svn_url":"https://github.com/qorelanguage/qore","homepage":null,"size":40281,"stargazers_count":18,"watchers_count":18,"language":"C++","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":6,"mirror_url":null,"archived":false,"open_issues_count":248,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":6,"open_issues":248,"watchers":18,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/qorelanguage/qore/pulls/2976"},"html":{"href":"https://github.com/qorelanguage/qore/pull/2976"},"issue":{"href":"https://api.github.com/repos/qorelanguage/qore/issues/2976"},"comments":{"href":"https://api.github.com/repos/qorelanguage/qore/issues/2976/comments"},"review_comments":{"href":"https://api.github.com/repos/qorelanguage/qore/pulls/2976/comments"},"review_comment":{"href":"https://api.github.com/repos/qorelanguage/qore/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/qorelanguage/qore/pulls/2976/commits"},"statuses":{"href":"https://api.github.com/repos/qorelanguage/qore/statuses/2933dd2e7af7eadd376409aca78e37751318884a"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"geckon"}}