{"action":"created","comment":{"url":"https://api.github.com/repos/quasar-analytics/quasar/pulls/comments/75196657","id":75196657,"diff_hunk":"@@ -0,0 +1,146 @@\n+/*\n+ * Copyright 2014–2016 SlamData Inc.\n+ *\n+ * Licensed under the Apache License, Version 2.0 (the \"License\");\n+ * you may not use this file except in compliance with the License.\n+ * You may obtain a copy of the License at\n+ *\n+ *     http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+ */\n+\n+/*\n+ * Copyright 2014–2016 SlamData Inc.\n+ *\n+ * Licensed under the Apache License, Version 2.0 (the \"License\");\n+ * you may not use this file except in compliance with the License.\n+ * You may obtain a copy of the License at\n+ *\n+ *     http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+ */\n+\n+package quasar.physical.sparkcore.fs.local\n+\n+import quasar.Predef._\n+import quasar.fs._\n+import quasar.fs.PathError._\n+import quasar.fs.FileSystemError._\n+import quasar.fp.free._\n+import quasar.fs.ManageFile._\n+import quasar.fs.ManageFile.MoveScenario._\n+import quasar.fs.impl.ensureMoveSemantics\n+\n+import java.nio.file._\n+\n+import org.apache.commons.io.FileUtils\n+import pathy.Path.posixCodec\n+import scalaz._\n+import Scalaz._\n+import scalaz.concurrent.Task\n+\n+object managefile {\n+\n+  def interpret[S[_]](implicit\n+    s0: Task :<: S\n+  ): ManageFile ~> Free[S, ?] =\n+    new (ManageFile ~> Free[S, ?]) {\n+      def apply[A](mf: ManageFile[A]): Free[S, A] = mf match {\n+        case Move(FileToFile(sf, df), semantics) =>\n+          injectFT[Task, S].apply{\n+            ensureMoveSemantics(df, doesPathExist, semantics)\n+              .fold(fse => Task.now(fse.left), moveFile(sf, df)).join\n+          }\n+        case Move(DirToDir(sd, dd), semantics) =>\n+          injectFT[Task, S].apply{\n+            ensureMoveSemantics(dd, doesPathExist, semantics)\n+              .fold(fse => Task.now(fse.left), moveDir(sd, dd)).join\n+          }\n+        case Delete(path) => delete(path)\n+        case TempFile(near) => tempFile(near)\n+      }\n+    }\n+\n+  private def toNioPath(path: APath): Path =\n+    Paths.get(posixCodec.unsafePrintPath(path))\n+\n+  private def toAFile(path: Path): Option[AFile] = {\n+    val maybeUnboxed = posixCodec.parseAbsFile(path.toString)\n+    maybeUnboxed.map(sandboxAbs(_))\n+  }\n+\n+  private def doesPathExist: APath => Task[Boolean] = path => Task.delay {\n+    Files.exists(toNioPath(path))\n+  }\n+\n+  private def moveFile(src: AFile, dst: AFile): Task[FileSystemError \\/ Unit] = Task.delay {\n+    \\/.fromTryCatchNonFatal(\n+      Files.move(toNioPath(src), toNioPath(dst), StandardCopyOption.REPLACE_EXISTING)\n+    ) .leftMap {\n+      case e => pathErr(invalidPath(dst, e.getMessage()))\n+    }.void\n+  }\n+\n+  private def moveDir(src: ADir, dst: ADir): Task[FileSystemError \\/ Unit] = Task.delay {\n+    \\/.fromTryCatchNonFatal{\n+      val deleted = FileUtils.deleteDirectory(toNioPath(dst).toFile())\n+      FileUtils.moveDirectory(toNioPath(src).toFile(), toNioPath(dst).toFile())\n+    }\n+      .leftMap {\n+      case e => pathErr(invalidPath(dst, e.getMessage()))\n+    }.void\n+  }\n+\n+  private def delete[S[_]](path: APath)(implicit\n+    s0: Task :<: S\n+  ): Free[S, FileSystemError \\/ Unit] = {\n+    val task: Task[FileSystemError \\/ Unit] = Task.delay {\n+      \\/.fromTryCatchNonFatal(Files.delete(toNioPath(path)))\n+        .leftMap {\n+        case e: NoSuchFileException => pathErr(pathNotFound(path))\n+        case e: DirectoryNotEmptyException => pathErr(pathNotFound(path))\n+        case e => pathErr(invalidPath(path, e.getMessage()))\n+      }\n+    }\n+    injectFT[Task, S].apply(task)\n+  }\n+\n+  private def tempFile[S[_]](near: APath)(implicit\n+    s0: Task :<: S\n+  ): Free[S, FileSystemError \\/ AFile] = {\n+\n+    def handleCreationError: Throwable => FileSystemError = {\n+      case e: NoSuchFileException => pathErr(pathNotFound(near))\n+      case e: FileAlreadyExistsException => pathErr(pathExists(near))\n+      case e: FileSystemException if e.getMessage.contains(\"Not a directory\") => pathErr(invalidPath(\n+        near,\n+        s\"Provided $near is not a directory\"))\n+\n+      case e => pathErr(invalidPath(near, e.getMessage()))\n+    }\n+\n+    def fileToMaybeAFile: Path => FileSystemError \\/ AFile = f =>\n+        toAFile(f) \\/> (pathErr(invalidPath(near, s\"Could not create temp file in dir $near\")))\n+    \n+    val task: Task[FileSystemError \\/ AFile] = Task.delay {\n+      val posix = posixCodec.unsafePrintPath(near) + \"/\"\n+      val prefix = \"quasar\"\n+      val suffix = \".tmp\"\n+      \\/.fromTryCatchNonFatal(Files.createTempFile(Paths.get(posix), prefix, suffix))","path":"sparkcore/src/main/scala/quasar/physical/sparkcore/fs/local/managefile.scala","position":139,"original_position":139,"commit_id":"e04555a22367553e10771e6df8f07c2a7007f338","original_commit_id":"e04555a22367553e10771e6df8f07c2a7007f338","user":{"login":"rabbitonweb","id":6287558,"avatar_url":"https://avatars.githubusercontent.com/u/6287558?v=3","gravatar_id":"","url":"https://api.github.com/users/rabbitonweb","html_url":"https://github.com/rabbitonweb","followers_url":"https://api.github.com/users/rabbitonweb/followers","following_url":"https://api.github.com/users/rabbitonweb/following{/other_user}","gists_url":"https://api.github.com/users/rabbitonweb/gists{/gist_id}","starred_url":"https://api.github.com/users/rabbitonweb/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rabbitonweb/subscriptions","organizations_url":"https://api.github.com/users/rabbitonweb/orgs","repos_url":"https://api.github.com/users/rabbitonweb/repos","events_url":"https://api.github.com/users/rabbitonweb/events{/privacy}","received_events_url":"https://api.github.com/users/rabbitonweb/received_events","type":"User","site_admin":false},"body":"Does it mean that not only temp file does not have to exist but also the entire path? \r\n\r\nFor example let's say that given on file system exists only folder `/var/` and after running `TempFile` you get `/var/foo/bar/baz/0000.tmp` where obviously `foo` (and it's children) does not exist -> and it's still is a valid implementation?","created_at":"2016-08-17T20:08:46Z","updated_at":"2016-08-17T20:08:46Z","html_url":"https://github.com/quasar-analytics/quasar/pull/1307#discussion_r75196657","pull_request_url":"https://api.github.com/repos/quasar-analytics/quasar/pulls/1307","_links":{"self":{"href":"https://api.github.com/repos/quasar-analytics/quasar/pulls/comments/75196657"},"html":{"href":"https://github.com/quasar-analytics/quasar/pull/1307#discussion_r75196657"},"pull_request":{"href":"https://api.github.com/repos/quasar-analytics/quasar/pulls/1307"}}},"pull_request":{"url":"https://api.github.com/repos/quasar-analytics/quasar/pulls/1307","id":79356754,"html_url":"https://github.com/quasar-analytics/quasar/pull/1307","diff_url":"https://github.com/quasar-analytics/quasar/pull/1307.diff","patch_url":"https://github.com/quasar-analytics/quasar/pull/1307.patch","issue_url":"https://api.github.com/repos/quasar-analytics/quasar/issues/1307","number":1307,"state":"open","locked":false,"title":"spark-local manage file","user":{"login":"rabbitonweb","id":6287558,"avatar_url":"https://avatars.githubusercontent.com/u/6287558?v=3","gravatar_id":"","url":"https://api.github.com/users/rabbitonweb","html_url":"https://github.com/rabbitonweb","followers_url":"https://api.github.com/users/rabbitonweb/followers","following_url":"https://api.github.com/users/rabbitonweb/following{/other_user}","gists_url":"https://api.github.com/users/rabbitonweb/gists{/gist_id}","starred_url":"https://api.github.com/users/rabbitonweb/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rabbitonweb/subscriptions","organizations_url":"https://api.github.com/users/rabbitonweb/orgs","repos_url":"https://api.github.com/users/rabbitonweb/repos","events_url":"https://api.github.com/users/rabbitonweb/events{/privacy}","received_events_url":"https://api.github.com/users/rabbitonweb/received_events","type":"User","site_admin":false},"body":"","created_at":"2016-07-29T13:09:17Z","updated_at":"2016-08-17T20:08:46Z","closed_at":null,"merged_at":null,"merge_commit_sha":"30cf2dfe18d11aff24eab2bff1372c6abe5d7a4d","assignee":{"login":"wemrysi","id":32185,"avatar_url":"https://avatars.githubusercontent.com/u/32185?v=3","gravatar_id":"","url":"https://api.github.com/users/wemrysi","html_url":"https://github.com/wemrysi","followers_url":"https://api.github.com/users/wemrysi/followers","following_url":"https://api.github.com/users/wemrysi/following{/other_user}","gists_url":"https://api.github.com/users/wemrysi/gists{/gist_id}","starred_url":"https://api.github.com/users/wemrysi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wemrysi/subscriptions","organizations_url":"https://api.github.com/users/wemrysi/orgs","repos_url":"https://api.github.com/users/wemrysi/repos","events_url":"https://api.github.com/users/wemrysi/events{/privacy}","received_events_url":"https://api.github.com/users/wemrysi/received_events","type":"User","site_admin":false},"assignees":[{"login":"wemrysi","id":32185,"avatar_url":"https://avatars.githubusercontent.com/u/32185?v=3","gravatar_id":"","url":"https://api.github.com/users/wemrysi","html_url":"https://github.com/wemrysi","followers_url":"https://api.github.com/users/wemrysi/followers","following_url":"https://api.github.com/users/wemrysi/following{/other_user}","gists_url":"https://api.github.com/users/wemrysi/gists{/gist_id}","starred_url":"https://api.github.com/users/wemrysi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wemrysi/subscriptions","organizations_url":"https://api.github.com/users/wemrysi/orgs","repos_url":"https://api.github.com/users/wemrysi/repos","events_url":"https://api.github.com/users/wemrysi/events{/privacy}","received_events_url":"https://api.github.com/users/wemrysi/received_events","type":"User","site_admin":false}],"milestone":{"url":"https://api.github.com/repos/quasar-analytics/quasar/milestones/11","html_url":"https://github.com/quasar-analytics/quasar/milestones/3.1-M1","labels_url":"https://api.github.com/repos/quasar-analytics/quasar/milestones/11/labels","id":1904091,"number":11,"title":"3.1-M1","description":"","creator":{"login":"jedesah","id":1780116,"avatar_url":"https://avatars.githubusercontent.com/u/1780116?v=3","gravatar_id":"","url":"https://api.github.com/users/jedesah","html_url":"https://github.com/jedesah","followers_url":"https://api.github.com/users/jedesah/followers","following_url":"https://api.github.com/users/jedesah/following{/other_user}","gists_url":"https://api.github.com/users/jedesah/gists{/gist_id}","starred_url":"https://api.github.com/users/jedesah/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jedesah/subscriptions","organizations_url":"https://api.github.com/users/jedesah/orgs","repos_url":"https://api.github.com/users/jedesah/repos","events_url":"https://api.github.com/users/jedesah/events{/privacy}","received_events_url":"https://api.github.com/users/jedesah/received_events","type":"User","site_admin":false},"open_issues":5,"closed_issues":1,"state":"open","created_at":"2016-07-26T03:36:52Z","updated_at":"2016-08-02T16:06:24Z","due_on":"2016-08-04T06:00:00Z","closed_at":null},"commits_url":"https://api.github.com/repos/quasar-analytics/quasar/pulls/1307/commits","review_comments_url":"https://api.github.com/repos/quasar-analytics/quasar/pulls/1307/comments","review_comment_url":"https://api.github.com/repos/quasar-analytics/quasar/pulls/comments{/number}","comments_url":"https://api.github.com/repos/quasar-analytics/quasar/issues/1307/comments","statuses_url":"https://api.github.com/repos/quasar-analytics/quasar/statuses/e04555a22367553e10771e6df8f07c2a7007f338","head":{"label":"rabbitonweb:1255-sparkcore-manage-file","ref":"1255-sparkcore-manage-file","sha":"e04555a22367553e10771e6df8f07c2a7007f338","user":{"login":"rabbitonweb","id":6287558,"avatar_url":"https://avatars.githubusercontent.com/u/6287558?v=3","gravatar_id":"","url":"https://api.github.com/users/rabbitonweb","html_url":"https://github.com/rabbitonweb","followers_url":"https://api.github.com/users/rabbitonweb/followers","following_url":"https://api.github.com/users/rabbitonweb/following{/other_user}","gists_url":"https://api.github.com/users/rabbitonweb/gists{/gist_id}","starred_url":"https://api.github.com/users/rabbitonweb/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rabbitonweb/subscriptions","organizations_url":"https://api.github.com/users/rabbitonweb/orgs","repos_url":"https://api.github.com/users/rabbitonweb/repos","events_url":"https://api.github.com/users/rabbitonweb/events{/privacy}","received_events_url":"https://api.github.com/users/rabbitonweb/received_events","type":"User","site_admin":false},"repo":{"id":59917674,"name":"quasar","full_name":"rabbitonweb/quasar","owner":{"login":"rabbitonweb","id":6287558,"avatar_url":"https://avatars.githubusercontent.com/u/6287558?v=3","gravatar_id":"","url":"https://api.github.com/users/rabbitonweb","html_url":"https://github.com/rabbitonweb","followers_url":"https://api.github.com/users/rabbitonweb/followers","following_url":"https://api.github.com/users/rabbitonweb/following{/other_user}","gists_url":"https://api.github.com/users/rabbitonweb/gists{/gist_id}","starred_url":"https://api.github.com/users/rabbitonweb/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rabbitonweb/subscriptions","organizations_url":"https://api.github.com/users/rabbitonweb/orgs","repos_url":"https://api.github.com/users/rabbitonweb/repos","events_url":"https://api.github.com/users/rabbitonweb/events{/privacy}","received_events_url":"https://api.github.com/users/rabbitonweb/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/rabbitonweb/quasar","description":"A NoSQL analytics engine that embraces post-relational analytics and pushes computation to the data.","fork":true,"url":"https://api.github.com/repos/rabbitonweb/quasar","forks_url":"https://api.github.com/repos/rabbitonweb/quasar/forks","keys_url":"https://api.github.com/repos/rabbitonweb/quasar/keys{/key_id}","collaborators_url":"https://api.github.com/repos/rabbitonweb/quasar/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/rabbitonweb/quasar/teams","hooks_url":"https://api.github.com/repos/rabbitonweb/quasar/hooks","issue_events_url":"https://api.github.com/repos/rabbitonweb/quasar/issues/events{/number}","events_url":"https://api.github.com/repos/rabbitonweb/quasar/events","assignees_url":"https://api.github.com/repos/rabbitonweb/quasar/assignees{/user}","branches_url":"https://api.github.com/repos/rabbitonweb/quasar/branches{/branch}","tags_url":"https://api.github.com/repos/rabbitonweb/quasar/tags","blobs_url":"https://api.github.com/repos/rabbitonweb/quasar/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/rabbitonweb/quasar/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/rabbitonweb/quasar/git/refs{/sha}","trees_url":"https://api.github.com/repos/rabbitonweb/quasar/git/trees{/sha}","statuses_url":"https://api.github.com/repos/rabbitonweb/quasar/statuses/{sha}","languages_url":"https://api.github.com/repos/rabbitonweb/quasar/languages","stargazers_url":"https://api.github.com/repos/rabbitonweb/quasar/stargazers","contributors_url":"https://api.github.com/repos/rabbitonweb/quasar/contributors","subscribers_url":"https://api.github.com/repos/rabbitonweb/quasar/subscribers","subscription_url":"https://api.github.com/repos/rabbitonweb/quasar/subscription","commits_url":"https://api.github.com/repos/rabbitonweb/quasar/commits{/sha}","git_commits_url":"https://api.github.com/repos/rabbitonweb/quasar/git/commits{/sha}","comments_url":"https://api.github.com/repos/rabbitonweb/quasar/comments{/number}","issue_comment_url":"https://api.github.com/repos/rabbitonweb/quasar/issues/comments{/number}","contents_url":"https://api.github.com/repos/rabbitonweb/quasar/contents/{+path}","compare_url":"https://api.github.com/repos/rabbitonweb/quasar/compare/{base}...{head}","merges_url":"https://api.github.com/repos/rabbitonweb/quasar/merges","archive_url":"https://api.github.com/repos/rabbitonweb/quasar/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/rabbitonweb/quasar/downloads","issues_url":"https://api.github.com/repos/rabbitonweb/quasar/issues{/number}","pulls_url":"https://api.github.com/repos/rabbitonweb/quasar/pulls{/number}","milestones_url":"https://api.github.com/repos/rabbitonweb/quasar/milestones{/number}","notifications_url":"https://api.github.com/repos/rabbitonweb/quasar/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/rabbitonweb/quasar/labels{/name}","releases_url":"https://api.github.com/repos/rabbitonweb/quasar/releases{/id}","deployments_url":"https://api.github.com/repos/rabbitonweb/quasar/deployments","created_at":"2016-05-28T22:55:51Z","updated_at":"2016-05-28T22:55:56Z","pushed_at":"2016-08-17T10:48:14Z","git_url":"git://github.com/rabbitonweb/quasar.git","ssh_url":"git@github.com:rabbitonweb/quasar.git","clone_url":"https://github.com/rabbitonweb/quasar.git","svn_url":"https://github.com/rabbitonweb/quasar","homepage":"http://quasar-analytics.org","size":12688,"stargazers_count":0,"watchers_count":0,"language":"Scala","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":"quasar-analytics:master","ref":"master","sha":"4aa59f2c9d690d724d77475bb1ccbd60e8f8b3bb","user":{"login":"quasar-analytics","id":15095906,"avatar_url":"https://avatars.githubusercontent.com/u/15095906?v=3","gravatar_id":"","url":"https://api.github.com/users/quasar-analytics","html_url":"https://github.com/quasar-analytics","followers_url":"https://api.github.com/users/quasar-analytics/followers","following_url":"https://api.github.com/users/quasar-analytics/following{/other_user}","gists_url":"https://api.github.com/users/quasar-analytics/gists{/gist_id}","starred_url":"https://api.github.com/users/quasar-analytics/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/quasar-analytics/subscriptions","organizations_url":"https://api.github.com/users/quasar-analytics/orgs","repos_url":"https://api.github.com/users/quasar-analytics/repos","events_url":"https://api.github.com/users/quasar-analytics/events{/privacy}","received_events_url":"https://api.github.com/users/quasar-analytics/received_events","type":"Organization","site_admin":false},"repo":{"id":16515058,"name":"quasar","full_name":"quasar-analytics/quasar","owner":{"login":"quasar-analytics","id":15095906,"avatar_url":"https://avatars.githubusercontent.com/u/15095906?v=3","gravatar_id":"","url":"https://api.github.com/users/quasar-analytics","html_url":"https://github.com/quasar-analytics","followers_url":"https://api.github.com/users/quasar-analytics/followers","following_url":"https://api.github.com/users/quasar-analytics/following{/other_user}","gists_url":"https://api.github.com/users/quasar-analytics/gists{/gist_id}","starred_url":"https://api.github.com/users/quasar-analytics/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/quasar-analytics/subscriptions","organizations_url":"https://api.github.com/users/quasar-analytics/orgs","repos_url":"https://api.github.com/users/quasar-analytics/repos","events_url":"https://api.github.com/users/quasar-analytics/events{/privacy}","received_events_url":"https://api.github.com/users/quasar-analytics/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/quasar-analytics/quasar","description":"A NoSQL analytics engine that embraces post-relational analytics and pushes computation to the data.","fork":false,"url":"https://api.github.com/repos/quasar-analytics/quasar","forks_url":"https://api.github.com/repos/quasar-analytics/quasar/forks","keys_url":"https://api.github.com/repos/quasar-analytics/quasar/keys{/key_id}","collaborators_url":"https://api.github.com/repos/quasar-analytics/quasar/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/quasar-analytics/quasar/teams","hooks_url":"https://api.github.com/repos/quasar-analytics/quasar/hooks","issue_events_url":"https://api.github.com/repos/quasar-analytics/quasar/issues/events{/number}","events_url":"https://api.github.com/repos/quasar-analytics/quasar/events","assignees_url":"https://api.github.com/repos/quasar-analytics/quasar/assignees{/user}","branches_url":"https://api.github.com/repos/quasar-analytics/quasar/branches{/branch}","tags_url":"https://api.github.com/repos/quasar-analytics/quasar/tags","blobs_url":"https://api.github.com/repos/quasar-analytics/quasar/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/quasar-analytics/quasar/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/quasar-analytics/quasar/git/refs{/sha}","trees_url":"https://api.github.com/repos/quasar-analytics/quasar/git/trees{/sha}","statuses_url":"https://api.github.com/repos/quasar-analytics/quasar/statuses/{sha}","languages_url":"https://api.github.com/repos/quasar-analytics/quasar/languages","stargazers_url":"https://api.github.com/repos/quasar-analytics/quasar/stargazers","contributors_url":"https://api.github.com/repos/quasar-analytics/quasar/contributors","subscribers_url":"https://api.github.com/repos/quasar-analytics/quasar/subscribers","subscription_url":"https://api.github.com/repos/quasar-analytics/quasar/subscription","commits_url":"https://api.github.com/repos/quasar-analytics/quasar/commits{/sha}","git_commits_url":"https://api.github.com/repos/quasar-analytics/quasar/git/commits{/sha}","comments_url":"https://api.github.com/repos/quasar-analytics/quasar/comments{/number}","issue_comment_url":"https://api.github.com/repos/quasar-analytics/quasar/issues/comments{/number}","contents_url":"https://api.github.com/repos/quasar-analytics/quasar/contents/{+path}","compare_url":"https://api.github.com/repos/quasar-analytics/quasar/compare/{base}...{head}","merges_url":"https://api.github.com/repos/quasar-analytics/quasar/merges","archive_url":"https://api.github.com/repos/quasar-analytics/quasar/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/quasar-analytics/quasar/downloads","issues_url":"https://api.github.com/repos/quasar-analytics/quasar/issues{/number}","pulls_url":"https://api.github.com/repos/quasar-analytics/quasar/pulls{/number}","milestones_url":"https://api.github.com/repos/quasar-analytics/quasar/milestones{/number}","notifications_url":"https://api.github.com/repos/quasar-analytics/quasar/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/quasar-analytics/quasar/labels{/name}","releases_url":"https://api.github.com/repos/quasar-analytics/quasar/releases{/id}","deployments_url":"https://api.github.com/repos/quasar-analytics/quasar/deployments","created_at":"2014-02-04T15:01:27Z","updated_at":"2016-08-15T13:52:11Z","pushed_at":"2016-08-17T19:58:38Z","git_url":"git://github.com/quasar-analytics/quasar.git","ssh_url":"git@github.com:quasar-analytics/quasar.git","clone_url":"https://github.com/quasar-analytics/quasar.git","svn_url":"https://github.com/quasar-analytics/quasar","homepage":"http://quasar-analytics.org","size":15849,"stargazers_count":289,"watchers_count":289,"language":"Scala","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":49,"mirror_url":null,"open_issues_count":57,"forks":49,"open_issues":57,"watchers":289,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/quasar-analytics/quasar/pulls/1307"},"html":{"href":"https://github.com/quasar-analytics/quasar/pull/1307"},"issue":{"href":"https://api.github.com/repos/quasar-analytics/quasar/issues/1307"},"comments":{"href":"https://api.github.com/repos/quasar-analytics/quasar/issues/1307/comments"},"review_comments":{"href":"https://api.github.com/repos/quasar-analytics/quasar/pulls/1307/comments"},"review_comment":{"href":"https://api.github.com/repos/quasar-analytics/quasar/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/quasar-analytics/quasar/pulls/1307/commits"},"statuses":{"href":"https://api.github.com/repos/quasar-analytics/quasar/statuses/e04555a22367553e10771e6df8f07c2a7007f338"}}}}
{"actor":{"display_login":"rabbitonweb"}}