{"action":"created","comment":{"url":"https://api.github.com/repos/mozilla-b2g/gaia/pulls/comments/28948784","id":28948784,"diff_hunk":"@@ -295,163 +594,201 @@ suite('Nfc Handover Manager Functions', function() {\n \n       nfcHandoverManager.sendFileQueue = [];\n       nfcHandoverManager.start();\n-      invokeBluetoothGetDefaultAdapter();\n     });\n \n     teardown(function() {\n-      MockBluetooth.enabled = false;\n-      MockService.mIsFileTransferInProgress = false;\n-\n-      spySendNDEF.restore();\n       nfcHandoverManager.sendFileQueue = [];\n       nfcHandoverManager.stop();\n     });\n \n     test('\"nfc-manager-send-file\" results in handover request sent to peer',\n       function() {\n+        this.sinon.stub(Service, 'query')\n+          .withArgs('BluetoothTransfer.isFileTransferInProgress')\n+          .returns(false);\n+        this.sinon.stub(nfcHandoverManager, '_doAction');\n+        nfcHandoverManager.handleFileTransfer(fileRequest);\n \n-      MockNavigatormozSetMessageHandler.mTrigger(\n-        'nfc-manager-send-file', fileRequest);\n-\n-      assert.isTrue(spySendNDEF.calledOnce);\n-\n-      // CPS should be either active or activating. In this test\n-      // MockBluetooths sets it to active, so assert that.\n-      var cps = spySendNDEF.firstCall.args[0][0].payload[13];\n-      assert.equal(cps, NDEF.CPS_ACTIVE);\n-\n-      // OOB payload should contain MAC address of this device's\n-      // default Bluetooth Adapter (it's being sent to a peer).\n-      var OOB = Array.apply([], spySendNDEF.firstCall.args[0][1].payload);\n-      var myMAC = NDEFUtils.parseMAC(\n-        MockBluetooth.defaultAdapter.address);\n-      assert.deepEqual(OOB.slice(2, 8), myMAC);\n-\n-      assert.isTrue(nfcHandoverManager.isHandoverInProgress());\n-\n-      var ndefPromise = spySendNDEF.returnValues[0];\n-      ndefPromise.mFulfillToValue();\n-      assert.equal(1, nfcHandoverManager.sendFileQueue.length);\n+        assert.ok(nfcHandoverManager._saveBluetoothStatus.called);\n+        assert.ok(nfcHandoverManager._doAction.calledWith({\n+          callback: nfcHandoverManager._initiateFileTransfer,\n+          args: [fileRequest]}));\n     });\n \n     test('Sending aborts when another file is transmitted concurrently',\n       function() {\n+        this.sinon.stub(Service, 'query').returns(true);\n+        var stubShowNotification = this.sinon.stub(nfcHandoverManager,\n+          '_showTryAgainNotification');\n+        nfcHandoverManager.handleFileTransfer(fileRequest);\n \n-      MockService.mIsFileTransferInProgress = true;\n-\n-      var stubShowNotification = this.sinon.stub(nfcHandoverManager,\n-                                                 '_showTryAgainNotification');\n-      MockNavigatormozSetMessageHandler.mTrigger(\n-        'nfc-manager-send-file', fileRequest);\n-      assert.isTrue(stubShowNotification.calledOnce,\n-                    'Notification not shown');\n+        assert.ok(Service.query\n+          .calledWith('BluetoothTransfer.isFileTransferInProgress'));\n+        assert.ok(stubShowNotification.calledOnce,\n+                      'Notification not shown');\n     });\n \n     test('Aborts when sendNDEF() fails.', function() {\n+      this.sinon.spy(nfcHandoverManager, 'handleFileTransfer');\n+      this.sinon.spy(nfcHandoverManager, '_dispatchSendFileStatus');\n+      this.sinon.spy(nfcHandoverManager, '_showTryAgainNotification');\n+      this.sinon.stub(Service, 'query').returns(true);\n       MockNavigatormozSetMessageHandler.mTrigger(\n         'nfc-manager-send-file', fileRequest);\n \n-      var spyNotify = this.sinon.spy(MockMozNfc, 'notifySendFileStatus');\n-\n-      var ndefPromise = spySendNDEF.returnValues[0];\n-      ndefPromise.mRejectToError();\n+      assert.ok(nfcHandoverManager.handleFileTransfer.called);\n       assert.equal(0, nfcHandoverManager.sendFileQueue.length);\n-      assert.isTrue(spyNotify.calledOnce);\n-      assert.equal(spyNotify.firstCall.args[0], 1);\n+      assert.ok(nfcHandoverManager._dispatchSendFileStatus.called);\n+      assert.ok(nfcHandoverManager._showTryAgainNotification.called);\n     });\n \n     test('Aborts when MozNFCPeer lost during file send.', function() {\n       fileRequest.peer = {isLost: true};\n-      var spyNotify = this.sinon.spy(MockMozNfc, 'notifySendFileStatus');\n-      var stubShowNotification = this.sinon.stub(nfcHandoverManager,\n-                                                 '_showFailedNotification');\n-      var stubRestoreBT = this.sinon.stub(nfcHandoverManager,\n-                                          '_restoreBluetoothStatus');\n-\n+      this.sinon.stub(Service, 'query').returns(true);\n+      this.sinon.spy(nfcHandoverManager, 'handleFileTransfer');\n+      this.sinon.spy(nfcHandoverManager, '_dispatchSendFileStatus');\n+      this.sinon.stub(nfcHandoverManager, '_showTryAgainNotification');\n+      this.sinon.spy(MockMozNfc, 'notifySendFileStatus');\n+      this.sinon.stub(nfcHandoverManager, '_restoreBluetoothStatus');\n       MockNavigatormozSetMessageHandler.mTrigger(\n         'nfc-manager-send-file', fileRequest);\n-      assert.isTrue(spyNotify.calledOnce);\n-      assert.equal(spyNotify.firstCall.args[0], 1);\n-      assert.isTrue(stubShowNotification\n-                    .withArgs('transferFinished-sentFailed-title',\n-                              fileRequest.blob.name)\n-                    .calledOnce,\n-                    'Notification not shown');\n-      assert.isTrue(stubRestoreBT.calledOnce, 'BT status not restored');\n+\n+      assert.ok(nfcHandoverManager.handleFileTransfer.called);\n+      assert.ok(nfcHandoverManager._dispatchSendFileStatus.called);\n+      assert.ok(nfcHandoverManager._showTryAgainNotification.called);\n+      assert.ok(MockMozNfc.notifySendFileStatus.calledOnce);\n+      assert.equal(MockMozNfc.notifySendFileStatus.firstCall.args[0], 1);\n+      assert.ok(nfcHandoverManager._showTryAgainNotification\n+        .calledOnce, 'Notification not shown');\n+      assert.ok(!nfcHandoverManager._saveBluetoothStatus.called);\n     });\n \n     test('Aborts when MozNFCPeer lost during file receive.', function() {\n       var cps = NDEF.CPS_ACTIVE;\n       var mac = '01:23:45:67:89:AB';\n       var handoverRequest = NDEFUtils.encodeHandoverRequest(mac, cps);\n-      var stubShowNotification = this.sinon.stub(nfcHandoverManager,\n-                                                 '_showFailedNotification');\n-      var stubRestoreBT = this.sinon.stub(nfcHandoverManager,\n-                                          '_restoreBluetoothStatus');\n-\n+      this.sinon.spy(MockMozNfc.MockNFCPeer, 'sendNDEF');\n+      this.sinon.stub(Service, 'query').returns(false);\n+      this.sinon.stub(NDEFUtils, 'encodeEmptyHandoverSelect');\n+      this.sinon.stub(nfcHandoverManager, '_doAction');\n       nfcHandoverManager._handleHandoverRequest(handoverRequest,\n         {isLost: true});\n-      assert.isTrue(spySendNDEF.notCalled);\n-      assert.isTrue(stubShowNotification\n-                    .withArgs('transferFinished-receivedFailed-title')\n-                    .calledOnce,\n-                    'Notification not shown');\n-      assert.isTrue(stubRestoreBT.calledOnce, 'BT status not restored');\n-    });\n \n-    test('Handover select results in file being transmitted over Bluetooth',\n-      function() {\n-      this.sinon.stub(nfcHandoverManager, 'publish');\n-      nfcHandoverManager.sendFileQueue.push(fileRequest);\n-\n-      var select = NDEFUtils.encodeHandoverSelect(\n-        '01:23:45:67:89:AB', NDEF.CPS_ACTIVE);\n-      nfcHandoverManager._handleHandoverSelect(select);\n-      assert.equal(nfcHandoverManager.publish.firstCall.args[0],\n-        'bluetooth-sendfile-via-handover');\n-      assert.deepEqual(nfcHandoverManager.publish.firstCall.args[1], {\n-        mac: '01:23:45:67:89:AB',\n-        blob: { name: 'Lorem ipsum' }\n-      });\n+      assert.ok(Service.query\n+        .calledWith('BluetoothTransfer.isFileTransferInProgress'));\n+      assert.ok(!NDEFUtils.encodeEmptyHandoverSelect.called);\n+      assert.ok(!MockMozNfc.MockNFCPeer.sendNDEF.called);\n+      assert.ok(nfcHandoverManager._saveBluetoothStatus.called);\n+      assert.ok(nfcHandoverManager._doAction.called);\n     });\n \n-    test('Empty Handover Select results in abort',\n+    test('Handover select results in file being transmitted over Bluetooth',\n       function() {\n-\n+        this.sinon.stub(Service, 'query').returns(true);","path":"apps/system/test/unit/nfc_handover_manager_test.js","position":858,"original_position":858,"commit_id":"0e7bb851490d19f045328cbe35d6c8b29731cc2a","original_commit_id":"0e7bb851490d19f045328cbe35d6c8b29731cc2a","user":{"login":"ian-liu","id":1704655,"avatar_url":"https://avatars.githubusercontent.com/u/1704655?v=3","gravatar_id":"","url":"https://api.github.com/users/ian-liu","html_url":"https://github.com/ian-liu","followers_url":"https://api.github.com/users/ian-liu/followers","following_url":"https://api.github.com/users/ian-liu/following{/other_user}","gists_url":"https://api.github.com/users/ian-liu/gists{/gist_id}","starred_url":"https://api.github.com/users/ian-liu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ian-liu/subscriptions","organizations_url":"https://api.github.com/users/ian-liu/orgs","repos_url":"https://api.github.com/users/ian-liu/repos","events_url":"https://api.github.com/users/ian-liu/events{/privacy}","received_events_url":"https://api.github.com/users/ian-liu/received_events","type":"User","site_admin":false},"body":"Remove one indent.","created_at":"2015-04-23T09:32:16Z","updated_at":"2015-04-23T09:32:16Z","html_url":"https://github.com/mozilla-b2g/gaia/pull/29131#discussion_r28948784","pull_request_url":"https://api.github.com/repos/mozilla-b2g/gaia/pulls/29131","_links":{"self":{"href":"https://api.github.com/repos/mozilla-b2g/gaia/pulls/comments/28948784"},"html":{"href":"https://github.com/mozilla-b2g/gaia/pull/29131#discussion_r28948784"},"pull_request":{"href":"https://api.github.com/repos/mozilla-b2g/gaia/pulls/29131"}}},"pull_request":{"url":"https://api.github.com/repos/mozilla-b2g/gaia/pulls/29131","id":31898703,"html_url":"https://github.com/mozilla-b2g/gaia/pull/29131","diff_url":"https://github.com/mozilla-b2g/gaia/pull/29131.diff","patch_url":"https://github.com/mozilla-b2g/gaia/pull/29131.patch","issue_url":"https://api.github.com/repos/mozilla-b2g/gaia/issues/29131","number":29131,"state":"open","locked":false,"title":"Bug 1090799 - make nfc_handover_manager get bluetooth adapter via service query, r=ian, tauzen","user":{"login":"gasolin","id":748808,"avatar_url":"https://avatars.githubusercontent.com/u/748808?v=3","gravatar_id":"","url":"https://api.github.com/users/gasolin","html_url":"https://github.com/gasolin","followers_url":"https://api.github.com/users/gasolin/followers","following_url":"https://api.github.com/users/gasolin/following{/other_user}","gists_url":"https://api.github.com/users/gasolin/gists{/gist_id}","starred_url":"https://api.github.com/users/gasolin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gasolin/subscriptions","organizations_url":"https://api.github.com/users/gasolin/orgs","repos_url":"https://api.github.com/users/gasolin/repos","events_url":"https://api.github.com/users/gasolin/events{/privacy}","received_events_url":"https://api.github.com/users/gasolin/received_events","type":"User","site_admin":false},"body":"- wrap API specific difference in bluetooth.js\r\n  - wrap the difference interface of adapter.getPairedDevices API\r\n  - rap the difference callback of adapter.pair API\r\n  - use adapter.getConnectedDevices API instead of device.connected\r\n- use object.watch to get BTv1 adapter\r\n- use service.query to detect if bluetooth is ready or not\r\n- use service.request to get bluetooth adapter asynchronously\r\n- cache adapter when bluetooth enabled and disabled\r\n- use BaseModule's debug, rename `_debug` to `debug`\r\n- fix test missusing mock_bluetooth.js instead of mock_navigator_moz_bluetooth\r\n- use MockPromise for test","created_at":"2015-03-25T07:27:27Z","updated_at":"2015-04-23T09:32:16Z","closed_at":null,"merged_at":null,"merge_commit_sha":"70e28321480b88cab1d50244a4fc0961d3be4d52","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/mozilla-b2g/gaia/pulls/29131/commits","review_comments_url":"https://api.github.com/repos/mozilla-b2g/gaia/pulls/29131/comments","review_comment_url":"https://api.github.com/repos/mozilla-b2g/gaia/pulls/comments{/number}","comments_url":"https://api.github.com/repos/mozilla-b2g/gaia/issues/29131/comments","statuses_url":"https://api.github.com/repos/mozilla-b2g/gaia/statuses/0e7bb851490d19f045328cbe35d6c8b29731cc2a","head":{"label":"gasolin:issue-1090799-5","ref":"issue-1090799-5","sha":"0e7bb851490d19f045328cbe35d6c8b29731cc2a","user":{"login":"gasolin","id":748808,"avatar_url":"https://avatars.githubusercontent.com/u/748808?v=3","gravatar_id":"","url":"https://api.github.com/users/gasolin","html_url":"https://github.com/gasolin","followers_url":"https://api.github.com/users/gasolin/followers","following_url":"https://api.github.com/users/gasolin/following{/other_user}","gists_url":"https://api.github.com/users/gasolin/gists{/gist_id}","starred_url":"https://api.github.com/users/gasolin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gasolin/subscriptions","organizations_url":"https://api.github.com/users/gasolin/orgs","repos_url":"https://api.github.com/users/gasolin/repos","events_url":"https://api.github.com/users/gasolin/events{/privacy}","received_events_url":"https://api.github.com/users/gasolin/received_events","type":"User","site_admin":false},"repo":{"id":8349595,"name":"gaia","full_name":"gasolin/gaia","owner":{"login":"gasolin","id":748808,"avatar_url":"https://avatars.githubusercontent.com/u/748808?v=3","gravatar_id":"","url":"https://api.github.com/users/gasolin","html_url":"https://github.com/gasolin","followers_url":"https://api.github.com/users/gasolin/followers","following_url":"https://api.github.com/users/gasolin/following{/other_user}","gists_url":"https://api.github.com/users/gasolin/gists{/gist_id}","starred_url":"https://api.github.com/users/gasolin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gasolin/subscriptions","organizations_url":"https://api.github.com/users/gasolin/orgs","repos_url":"https://api.github.com/users/gasolin/repos","events_url":"https://api.github.com/users/gasolin/events{/privacy}","received_events_url":"https://api.github.com/users/gasolin/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/gasolin/gaia","description":"Gaia is a HTML5-based Phone UI for the Boot 2 Gecko Project. NOTE: For details of what branches are used for what releases, see https://wiki.mozilla.org/Release_Management/B2G_Landing","fork":true,"url":"https://api.github.com/repos/gasolin/gaia","forks_url":"https://api.github.com/repos/gasolin/gaia/forks","keys_url":"https://api.github.com/repos/gasolin/gaia/keys{/key_id}","collaborators_url":"https://api.github.com/repos/gasolin/gaia/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/gasolin/gaia/teams","hooks_url":"https://api.github.com/repos/gasolin/gaia/hooks","issue_events_url":"https://api.github.com/repos/gasolin/gaia/issues/events{/number}","events_url":"https://api.github.com/repos/gasolin/gaia/events","assignees_url":"https://api.github.com/repos/gasolin/gaia/assignees{/user}","branches_url":"https://api.github.com/repos/gasolin/gaia/branches{/branch}","tags_url":"https://api.github.com/repos/gasolin/gaia/tags","blobs_url":"https://api.github.com/repos/gasolin/gaia/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/gasolin/gaia/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/gasolin/gaia/git/refs{/sha}","trees_url":"https://api.github.com/repos/gasolin/gaia/git/trees{/sha}","statuses_url":"https://api.github.com/repos/gasolin/gaia/statuses/{sha}","languages_url":"https://api.github.com/repos/gasolin/gaia/languages","stargazers_url":"https://api.github.com/repos/gasolin/gaia/stargazers","contributors_url":"https://api.github.com/repos/gasolin/gaia/contributors","subscribers_url":"https://api.github.com/repos/gasolin/gaia/subscribers","subscription_url":"https://api.github.com/repos/gasolin/gaia/subscription","commits_url":"https://api.github.com/repos/gasolin/gaia/commits{/sha}","git_commits_url":"https://api.github.com/repos/gasolin/gaia/git/commits{/sha}","comments_url":"https://api.github.com/repos/gasolin/gaia/comments{/number}","issue_comment_url":"https://api.github.com/repos/gasolin/gaia/issues/comments{/number}","contents_url":"https://api.github.com/repos/gasolin/gaia/contents/{+path}","compare_url":"https://api.github.com/repos/gasolin/gaia/compare/{base}...{head}","merges_url":"https://api.github.com/repos/gasolin/gaia/merges","archive_url":"https://api.github.com/repos/gasolin/gaia/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/gasolin/gaia/downloads","issues_url":"https://api.github.com/repos/gasolin/gaia/issues{/number}","pulls_url":"https://api.github.com/repos/gasolin/gaia/pulls{/number}","milestones_url":"https://api.github.com/repos/gasolin/gaia/milestones{/number}","notifications_url":"https://api.github.com/repos/gasolin/gaia/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/gasolin/gaia/labels{/name}","releases_url":"https://api.github.com/repos/gasolin/gaia/releases{/id}","created_at":"2013-02-22T03:20:25Z","updated_at":"2015-04-22T03:42:40Z","pushed_at":"2015-04-23T08:37:18Z","git_url":"git://github.com/gasolin/gaia.git","ssh_url":"git@github.com:gasolin/gaia.git","clone_url":"https://github.com/gasolin/gaia.git","svn_url":"https://github.com/gasolin/gaia","homepage":"https://wiki.mozilla.org/B2G","size":907538,"stargazers_count":1,"watchers_count":1,"language":"JavaScript","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":1,"default_branch":"master"}},"base":{"label":"mozilla-b2g:master","ref":"master","sha":"9ff83208c2392331e716852a818892ff9c4cedd6","user":{"login":"mozilla-b2g","id":1261292,"avatar_url":"https://avatars.githubusercontent.com/u/1261292?v=3","gravatar_id":"","url":"https://api.github.com/users/mozilla-b2g","html_url":"https://github.com/mozilla-b2g","followers_url":"https://api.github.com/users/mozilla-b2g/followers","following_url":"https://api.github.com/users/mozilla-b2g/following{/other_user}","gists_url":"https://api.github.com/users/mozilla-b2g/gists{/gist_id}","starred_url":"https://api.github.com/users/mozilla-b2g/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mozilla-b2g/subscriptions","organizations_url":"https://api.github.com/users/mozilla-b2g/orgs","repos_url":"https://api.github.com/users/mozilla-b2g/repos","events_url":"https://api.github.com/users/mozilla-b2g/events{/privacy}","received_events_url":"https://api.github.com/users/mozilla-b2g/received_events","type":"Organization","site_admin":false},"repo":{"id":2317369,"name":"gaia","full_name":"mozilla-b2g/gaia","owner":{"login":"mozilla-b2g","id":1261292,"avatar_url":"https://avatars.githubusercontent.com/u/1261292?v=3","gravatar_id":"","url":"https://api.github.com/users/mozilla-b2g","html_url":"https://github.com/mozilla-b2g","followers_url":"https://api.github.com/users/mozilla-b2g/followers","following_url":"https://api.github.com/users/mozilla-b2g/following{/other_user}","gists_url":"https://api.github.com/users/mozilla-b2g/gists{/gist_id}","starred_url":"https://api.github.com/users/mozilla-b2g/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mozilla-b2g/subscriptions","organizations_url":"https://api.github.com/users/mozilla-b2g/orgs","repos_url":"https://api.github.com/users/mozilla-b2g/repos","events_url":"https://api.github.com/users/mozilla-b2g/events{/privacy}","received_events_url":"https://api.github.com/users/mozilla-b2g/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/mozilla-b2g/gaia","description":"Gaia is a HTML5-based Phone UI for the Boot 2 Gecko Project. NOTE: For details of what branches are used for what releases, see","fork":false,"url":"https://api.github.com/repos/mozilla-b2g/gaia","forks_url":"https://api.github.com/repos/mozilla-b2g/gaia/forks","keys_url":"https://api.github.com/repos/mozilla-b2g/gaia/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mozilla-b2g/gaia/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mozilla-b2g/gaia/teams","hooks_url":"https://api.github.com/repos/mozilla-b2g/gaia/hooks","issue_events_url":"https://api.github.com/repos/mozilla-b2g/gaia/issues/events{/number}","events_url":"https://api.github.com/repos/mozilla-b2g/gaia/events","assignees_url":"https://api.github.com/repos/mozilla-b2g/gaia/assignees{/user}","branches_url":"https://api.github.com/repos/mozilla-b2g/gaia/branches{/branch}","tags_url":"https://api.github.com/repos/mozilla-b2g/gaia/tags","blobs_url":"https://api.github.com/repos/mozilla-b2g/gaia/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mozilla-b2g/gaia/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mozilla-b2g/gaia/git/refs{/sha}","trees_url":"https://api.github.com/repos/mozilla-b2g/gaia/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mozilla-b2g/gaia/statuses/{sha}","languages_url":"https://api.github.com/repos/mozilla-b2g/gaia/languages","stargazers_url":"https://api.github.com/repos/mozilla-b2g/gaia/stargazers","contributors_url":"https://api.github.com/repos/mozilla-b2g/gaia/contributors","subscribers_url":"https://api.github.com/repos/mozilla-b2g/gaia/subscribers","subscription_url":"https://api.github.com/repos/mozilla-b2g/gaia/subscription","commits_url":"https://api.github.com/repos/mozilla-b2g/gaia/commits{/sha}","git_commits_url":"https://api.github.com/repos/mozilla-b2g/gaia/git/commits{/sha}","comments_url":"https://api.github.com/repos/mozilla-b2g/gaia/comments{/number}","issue_comment_url":"https://api.github.com/repos/mozilla-b2g/gaia/issues/comments{/number}","contents_url":"https://api.github.com/repos/mozilla-b2g/gaia/contents/{+path}","compare_url":"https://api.github.com/repos/mozilla-b2g/gaia/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mozilla-b2g/gaia/merges","archive_url":"https://api.github.com/repos/mozilla-b2g/gaia/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mozilla-b2g/gaia/downloads","issues_url":"https://api.github.com/repos/mozilla-b2g/gaia/issues{/number}","pulls_url":"https://api.github.com/repos/mozilla-b2g/gaia/pulls{/number}","milestones_url":"https://api.github.com/repos/mozilla-b2g/gaia/milestones{/number}","notifications_url":"https://api.github.com/repos/mozilla-b2g/gaia/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mozilla-b2g/gaia/labels{/name}","releases_url":"https://api.github.com/repos/mozilla-b2g/gaia/releases{/id}","created_at":"2011-09-03T01:38:46Z","updated_at":"2015-04-23T08:54:09Z","pushed_at":"2015-04-23T09:31:26Z","git_url":"git://github.com/mozilla-b2g/gaia.git","ssh_url":"git@github.com:mozilla-b2g/gaia.git","clone_url":"https://github.com/mozilla-b2g/gaia.git","svn_url":"https://github.com/mozilla-b2g/gaia","homepage":"https://wiki.mozilla.org/B2G","size":1523570,"stargazers_count":1908,"watchers_count":1908,"language":"JavaScript","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":2286,"mirror_url":null,"open_issues_count":966,"forks":2286,"open_issues":966,"watchers":1908,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/mozilla-b2g/gaia/pulls/29131"},"html":{"href":"https://github.com/mozilla-b2g/gaia/pull/29131"},"issue":{"href":"https://api.github.com/repos/mozilla-b2g/gaia/issues/29131"},"comments":{"href":"https://api.github.com/repos/mozilla-b2g/gaia/issues/29131/comments"},"review_comments":{"href":"https://api.github.com/repos/mozilla-b2g/gaia/pulls/29131/comments"},"review_comment":{"href":"https://api.github.com/repos/mozilla-b2g/gaia/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/mozilla-b2g/gaia/pulls/29131/commits"},"statuses":{"href":"https://api.github.com/repos/mozilla-b2g/gaia/statuses/0e7bb851490d19f045328cbe35d6c8b29731cc2a"}}}}