{"action":"created","comment":{"url":"https://api.github.com/repos/translate/pootle/pulls/comments/39759140","id":39759140,"diff_hunk":"@@ -3,170 +3,259 @@\n Upgrading\n =========\n \n-These are the instructions for upgrading Pootle from an older version to a new\n-release.\n+These are the instructions for upgrading Pootle from an older version to the\n+current release.\n+\n+\n+.. _upgrading#stop-pootle:\n+\n+Stop your running Pootle\n+------------------------\n+\n+You may want to stop your running Pootle while you upgrade to prevent updates\n+to your data during the migration process. If you have RQ workers running you\n+may want to stop those also.\n+\n+\n+.. _upgrading#system-backup:\n+\n+Backup your system\n+------------------\n+\n \n .. warning::\n \n-  When upgrading please ensure that you:\n+   Before upgrading we **strongly** recommend that you\n+   :ref:`backup your current system <backup>`.\n+\n \n-  - **Carefully read this page** before proceeding\n-  - Make all the recommended **backups**\n-  - Try to **follow these instructions** as closely as possible\n+.. _upgrading#db-migration:\n \n+Migrate your database\n+---------------------\n \n-This page is divided in three sections:\n+If you are currently using SQLite for your database you will need to \n+:doc:`migrate to either MySQL or PostgreSQL <database_migration>`\n+before you upgrade.\n \n-1. Preparatory tasks that should be performed before upgrading.\n-2. Detailed steps to actually perform the upgrade.\n-3. Suggested tasks to fine tune the setup after upgrading.\n \n+.. _upgrading#latest-changes:\n \n-.. _upgrading#preparatory-tasks:\n+Latest changes\n+--------------\n \n-Preparatory tasks\n------------------\n+Before upgrading Pootle familiarize yourself with :doc:`important changes\n+</releases/index>` since the version that you are upgrading from.\n \n-Before upgrading Pootle to a newer version, make sure to go through this\n-checklist.\n \n-* Familiarize yourself with :doc:`important changes </releases/index>` in\n-  Pootle.\n+.. _upgrading#requirements:\n \n-* If you want to change the database backend then have a look at the\n-  :doc:`database migration <database_migration>` page first. We discourage\n-  using SQLite, so if you are using it please migrate to a real database\n-  server.\n+Check Pootle requirements\n+-------------------------\n \n-* Ensure that you meet the :ref:`hardware requirements\n-  <installation#hardware_requirements>` for the newer version.\n+You should check that you have all of the necessary :ref:`Pootle requirements\n+<requirements>` and have installed all required :ref:`system packages\n+<requirements#packages>`.\n \n-* Always make backups of all your translation files (your whole\n-  :setting:`POOTLE_TRANSLATION_DIRECTORY`). Use the :djadmin:`sync_stores`\n-  command to synchronize all your translation files to disk before making any\n-  backup.\n+.. warning::\n \n-* Also backup your settings, to avoid losing any settings customizations.\n+   Pootle 2.7.0 or newer requires **Python 2.7**\n \n-* Make a backup of your complete database using the appropriate *dump*\n-  command for your database system. For example :command:`mysqldump` for MySQL,\n-  or :command:`pg_dump` for PostgreSQL.\n+   If you are upgrading from a virtual environment using an earlier Python\n+   version, you **must** upgrade or rebuild your virtual environment first.\n \n-* And don't forget to backup any code, templates or styling customization that\n-  you have done to your installation.\n \n-* Familiarize yourself with any new :ref:`settings <settings#available>` that\n-  have been introduced.\n+.. _upgrading#activte-virtualenv:\n \n+Activate virtualenv\n+-------------------\n \n-.. _upgrading#upgrading:\n+These instructions assume that you are using ``virtualenv`` and you have\n+activated a virtual environment named ``env``.\n \n-Upgrading\n----------\n \n-Upgrading Pootle using the :command:`pip`.\n+.. _upgrading#update-pip:\n+\n+Update pip\n+----------\n \n-.. note:: You will need to adjust these instructions if you installed Pootle\n-   using another method, such as directly from a Git checkout.\n+You should now upgrade Pip to the latest version:\n+\n+.. code-block:: bash\n+\n+   (env) $ pip install --upgrade pip\n+\n+\n+.. _upgrading#upgrading-2.6:\n+\n+Upgrading from a version older than 2.6\n+---------------------------------------\n+\n+If you are upgrading from a version older than 2.6 you will need to first\n+upgrade to the latest 2.6.x version and then you will be able to upgrade to the\n+latest version.\n+\n+.. code-block:: bash\n+\n+   (env) $ pip install --upgrade \"Pootle>=2.6,<2.7\"\n+   (env) $ pootle setup\n \n .. warning::\n+   The 2.6.x releases are meant only as a migration step.\n \n-   Always backup the following before upgrading:\n+   You must upgrade immediately to the latest version once setup has\n+   completed.\n \n-   - the entire **database**\n-   - all the **settings**\n-   - all your **translation files**\n-   - any **code customizations**\n-   - any **templates customizations**\n-   - any **styling customizations**\n \n+.. _upgrading#clean-bytecode:\n \n-To perform the upgrade follow the next steps:\n+Clean up stale Python bytecode\n+------------------------------\n \n-* If you want to perform a :doc:`database migration <database_migration>` then\n-  do it first.\n+You should remove any stale Python bytecode files before upgrading.\n \n-* We highly recommended that you use a virtual environment. If your install\n-  currently doesn't use one then please :ref:`set up a virtualenv\n-  <installation#setup_environment>`.\n+Assuming you are in the root of your virtualenv folder you can run:\n \n-* If you are upgrading from a version older than Pootle 2.7.0, then you must\n-  first upgrade to Pootle 2.6.0.\n+.. code-block:: bash\n \n-  .. code-block:: bash\n+   (env) $ pyclean .\n \n-     (env) $ pip install --upgrade \"Pootle>=2.6,<2.7\"\n-     (env) $ pootle setup\n \n-  Then continue with the upgrade process.\n+.. _upgrading#upgrading-latest:\n \n-* Upgrade the Pootle package:\n+Upgrading from version 2.6.x\n+----------------------------\n \n-  .. code-block:: bash\n+Upgrade to the latest Pootle version:\n \n-     (env) $ pip install --upgrade Pootle\n+.. code-block:: bash\n \n-* Update your custom Pootle settings to adjust for any changes and to include\n-  any new settings. Delete any obsolete settings. Check the :ref:`available\n-  settings <settings#available>` as needed.\n+   (env) $ pip install --upgrade Pootle\n \n-  .. note:: Running :djadmin:`pootle check` will highlight settings that have\n-     been made obsolete or renamed.\n \n-  .. note:: If you are upgrading from a version of Pootle that uses\n-     :file:`localsettings.py` then you must :ref:`move your custom settings\n-     <settings#customizing>` to a new location in order to ensure that Pootle\n-     uses them.\n+.. _upgrading#check-settings:\n \n-* Perform the database schema and data upgrade by running:\n+Update and check your settings\n+------------------------------\n \n-  .. code-block:: bash\n+You should now update your custom Pootle settings to add, remove or adjust any\n+settings that have changed. You may want to view the latest \n+:ref:`available settings <settings#available>`.\n \n-     (env) $ pootle migrate\n+You can check to see if there are any issues with your configuration\n+settings that need to be resolved:\n \n+.. code-block:: bash\n \n-* Reapply your custom changes to Pootle code, templates or styling. Read about\n-  :doc:`customization of style sheets and templates\n-  </developers/customization>` to adjust your customizations to the correct\n-  locations and approach in the new release.\n+   (env) $ pootle check\n \n-  .. note:: If you have customized the CSS styling or the JavaScript code you\n-     will have to run the following commands to update the static assets:\n+.. note:: If you are upgrading from a version of Pootle that uses\n+   :file:`localsettings.py` then you may want to merge your old custom settings\n+   with your :ref:`settings conf file <settings#customizing>` (default location\n+   :file:`~/.pootle/pootle.conf`).\n \n-     .. code-block:: bash\n \n-       (env) $ cd $pootle_dir/pootle/static/js/\n-       (env) $ npm install\n-       (env) $ npm update\n-       (env) $ pootle webpack\n-       (env) $ pootle collectstatic --noinput --clear -i node_modules -i *.jsx\n-       (env) $ pootle assets build\n+.. _upgrading#start-rq:\n \n+Start an RQ Worker\n+------------------\n \n-     ``$pootle_dir`` is the directory where :command:`pip` installed Pootle. Its\n-     location depends on your settings for :command:`pip`, but by default it\n-     should be :file:`~/.virtualenvs/env/lib/python2.7/site-packages/`.\n+Statistics tracking and various other background processes are managed by `RQ\n+<http://python-rq.org/>`_.  The :djadmin:`rqworker` command needs to be run\n+continuously in order to process the jobs.\n \n+If you have not already done so you should\n+:ref:`install and start a Redis server <requirements#packages>`.\n \n-* Finally, restart your server.\n+You can start the worker in the background with the following command:\n \n+.. code-block:: bash\n \n-.. _upgrading#post-upgrade:\n+   (env) $ pootle rqworker &\n \n-Post-upgrade adjustments\n-------------------------\n+In a production environment you may want to :ref:`run RQ workers as services\n+<pootle#running_as_a_service>`.\n+\n+See here for :ref:`further information about RQ jobs in Pootle <rq>`.\n+\n+\n+.. _upgrading#schema-migration:\n+\n+Migrate your database schema\n+----------------------------\n+\n+Once you have updated your settings you can perform the database schema and\n+data upgrade by running. This needs to be done in a few steps:\n+\n+.. code-block:: bash\n+\n+   (env) $ pootle migrate accounts 0002 --fake\n+   (env) $ pootle migrate pootle_translationproject 0002 --fake\n+   (env) $ pootle migrate\n+\n+\n+.. _upgrading#refresh-stats:\n+\n+Refreshing checks and stats\n+---------------------------\n+\n+You must now update the translation checks and populate the Redis cache with\n+statistical data. You will need to have an :ref:`RQ worker running \n+<installation#running-rqworker>` to complete this.\n+\n+.. code-block:: bash\n+\n+   (env) $ pootle calculate_checks\n+   (env) $ pootle refresh_stats\n+\n+This command will dispatch jobs to the RQ worker and may take some time.\n+\n+If you wish to run ``calculate_checks`` and ``refresh_stats`` in the foreground\n+without using the RQ worker you can use the :option:`--no-rq` option.\n+\n+\n+.. _upgrading#setup-users:\n+\n+Set up users\n+------------\n+\n+Any accounts that do not have an email address registered will not be able to\n+log in. You can set the email for a user using the :djadmin:`update_user_email`\n+command.\n+\n+For example to set the email for user \"admin\" to \"admin@example.com\": \n+\n+.. code-block:: bash\n+\n+   (env) $ pootle update_user_email admin admin@example.com\n+\n+\n+As of Pootle 2.7 users must now verify their email before they can log in.","path":"docs/server/upgrading.rst","position":326,"original_position":326,"commit_id":"e3e2825ff5bef4a637dd7d4b336ab4aa9005a94d","original_commit_id":"f59cc6a0765b8c51f8a67a864d270c461c0025b2","user":{"login":"unho","id":939880,"avatar_url":"https://avatars.githubusercontent.com/u/939880?v=3","gravatar_id":"","url":"https://api.github.com/users/unho","html_url":"https://github.com/unho","followers_url":"https://api.github.com/users/unho/followers","following_url":"https://api.github.com/users/unho/following{/other_user}","gists_url":"https://api.github.com/users/unho/gists{/gist_id}","starred_url":"https://api.github.com/users/unho/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/unho/subscriptions","organizations_url":"https://api.github.com/users/unho/orgs","repos_url":"https://api.github.com/users/unho/repos","events_url":"https://api.github.com/users/unho/events{/privacy}","received_events_url":"https://api.github.com/users/unho/received_events","type":"User","site_admin":false},"body":"This belongs to release notes, not here.","created_at":"2015-09-17T15:24:31Z","updated_at":"2015-09-17T15:24:31Z","html_url":"https://github.com/translate/pootle/pull/4067#discussion_r39759140","pull_request_url":"https://api.github.com/repos/translate/pootle/pulls/4067","_links":{"self":{"href":"https://api.github.com/repos/translate/pootle/pulls/comments/39759140"},"html":{"href":"https://github.com/translate/pootle/pull/4067#discussion_r39759140"},"pull_request":{"href":"https://api.github.com/repos/translate/pootle/pulls/4067"}}},"pull_request":{"url":"https://api.github.com/repos/translate/pootle/pulls/4067","id":45039774,"html_url":"https://github.com/translate/pootle/pull/4067","diff_url":"https://github.com/translate/pootle/pull/4067.diff","patch_url":"https://github.com/translate/pootle/pull/4067.patch","issue_url":"https://api.github.com/repos/translate/pootle/issues/4067","number":4067,"state":"open","locked":false,"title":"Docs update","user":{"login":"phlax","id":454682,"avatar_url":"https://avatars.githubusercontent.com/u/454682?v=3","gravatar_id":"","url":"https://api.github.com/users/phlax","html_url":"https://github.com/phlax","followers_url":"https://api.github.com/users/phlax/followers","following_url":"https://api.github.com/users/phlax/following{/other_user}","gists_url":"https://api.github.com/users/phlax/gists{/gist_id}","starred_url":"https://api.github.com/users/phlax/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/phlax/subscriptions","organizations_url":"https://api.github.com/users/phlax/orgs","repos_url":"https://api.github.com/users/phlax/repos","events_url":"https://api.github.com/users/phlax/events{/privacy}","received_events_url":"https://api.github.com/users/phlax/received_events","type":"User","site_admin":false},"body":"Updating installation and migration docs","created_at":"2015-09-15T11:54:43Z","updated_at":"2015-09-17T15:24:31Z","closed_at":null,"merged_at":null,"merge_commit_sha":"06afc1433e06ea70379d1d4b55023829b14a0cfb","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/translate/pootle/pulls/4067/commits","review_comments_url":"https://api.github.com/repos/translate/pootle/pulls/4067/comments","review_comment_url":"https://api.github.com/repos/translate/pootle/pulls/comments{/number}","comments_url":"https://api.github.com/repos/translate/pootle/issues/4067/comments","statuses_url":"https://api.github.com/repos/translate/pootle/statuses/e3e2825ff5bef4a637dd7d4b336ab4aa9005a94d","head":{"label":"phlax:docs-update","ref":"docs-update","sha":"e3e2825ff5bef4a637dd7d4b336ab4aa9005a94d","user":{"login":"phlax","id":454682,"avatar_url":"https://avatars.githubusercontent.com/u/454682?v=3","gravatar_id":"","url":"https://api.github.com/users/phlax","html_url":"https://github.com/phlax","followers_url":"https://api.github.com/users/phlax/followers","following_url":"https://api.github.com/users/phlax/following{/other_user}","gists_url":"https://api.github.com/users/phlax/gists{/gist_id}","starred_url":"https://api.github.com/users/phlax/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/phlax/subscriptions","organizations_url":"https://api.github.com/users/phlax/orgs","repos_url":"https://api.github.com/users/phlax/repos","events_url":"https://api.github.com/users/phlax/events{/privacy}","received_events_url":"https://api.github.com/users/phlax/received_events","type":"User","site_admin":false},"repo":{"id":39886550,"name":"pootle","full_name":"phlax/pootle","owner":{"login":"phlax","id":454682,"avatar_url":"https://avatars.githubusercontent.com/u/454682?v=3","gravatar_id":"","url":"https://api.github.com/users/phlax","html_url":"https://github.com/phlax","followers_url":"https://api.github.com/users/phlax/followers","following_url":"https://api.github.com/users/phlax/following{/other_user}","gists_url":"https://api.github.com/users/phlax/gists{/gist_id}","starred_url":"https://api.github.com/users/phlax/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/phlax/subscriptions","organizations_url":"https://api.github.com/users/phlax/orgs","repos_url":"https://api.github.com/users/phlax/repos","events_url":"https://api.github.com/users/phlax/events{/privacy}","received_events_url":"https://api.github.com/users/phlax/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/phlax/pootle","description":"Online translation tool","fork":true,"url":"https://api.github.com/repos/phlax/pootle","forks_url":"https://api.github.com/repos/phlax/pootle/forks","keys_url":"https://api.github.com/repos/phlax/pootle/keys{/key_id}","collaborators_url":"https://api.github.com/repos/phlax/pootle/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/phlax/pootle/teams","hooks_url":"https://api.github.com/repos/phlax/pootle/hooks","issue_events_url":"https://api.github.com/repos/phlax/pootle/issues/events{/number}","events_url":"https://api.github.com/repos/phlax/pootle/events","assignees_url":"https://api.github.com/repos/phlax/pootle/assignees{/user}","branches_url":"https://api.github.com/repos/phlax/pootle/branches{/branch}","tags_url":"https://api.github.com/repos/phlax/pootle/tags","blobs_url":"https://api.github.com/repos/phlax/pootle/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/phlax/pootle/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/phlax/pootle/git/refs{/sha}","trees_url":"https://api.github.com/repos/phlax/pootle/git/trees{/sha}","statuses_url":"https://api.github.com/repos/phlax/pootle/statuses/{sha}","languages_url":"https://api.github.com/repos/phlax/pootle/languages","stargazers_url":"https://api.github.com/repos/phlax/pootle/stargazers","contributors_url":"https://api.github.com/repos/phlax/pootle/contributors","subscribers_url":"https://api.github.com/repos/phlax/pootle/subscribers","subscription_url":"https://api.github.com/repos/phlax/pootle/subscription","commits_url":"https://api.github.com/repos/phlax/pootle/commits{/sha}","git_commits_url":"https://api.github.com/repos/phlax/pootle/git/commits{/sha}","comments_url":"https://api.github.com/repos/phlax/pootle/comments{/number}","issue_comment_url":"https://api.github.com/repos/phlax/pootle/issues/comments{/number}","contents_url":"https://api.github.com/repos/phlax/pootle/contents/{+path}","compare_url":"https://api.github.com/repos/phlax/pootle/compare/{base}...{head}","merges_url":"https://api.github.com/repos/phlax/pootle/merges","archive_url":"https://api.github.com/repos/phlax/pootle/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/phlax/pootle/downloads","issues_url":"https://api.github.com/repos/phlax/pootle/issues{/number}","pulls_url":"https://api.github.com/repos/phlax/pootle/pulls{/number}","milestones_url":"https://api.github.com/repos/phlax/pootle/milestones{/number}","notifications_url":"https://api.github.com/repos/phlax/pootle/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/phlax/pootle/labels{/name}","releases_url":"https://api.github.com/repos/phlax/pootle/releases{/id}","created_at":"2015-07-29T10:00:35Z","updated_at":"2015-07-29T10:00:39Z","pushed_at":"2015-09-17T15:22:19Z","git_url":"git://github.com/phlax/pootle.git","ssh_url":"git@github.com:phlax/pootle.git","clone_url":"https://github.com/phlax/pootle.git","svn_url":"https://github.com/phlax/pootle","homepage":"http://pootle.translatehouse.org","size":76803,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"translate:master","ref":"master","sha":"18a658e28a8398d448a138425ab1cc06827feb3d","user":{"login":"translate","id":1538178,"avatar_url":"https://avatars.githubusercontent.com/u/1538178?v=3","gravatar_id":"","url":"https://api.github.com/users/translate","html_url":"https://github.com/translate","followers_url":"https://api.github.com/users/translate/followers","following_url":"https://api.github.com/users/translate/following{/other_user}","gists_url":"https://api.github.com/users/translate/gists{/gist_id}","starred_url":"https://api.github.com/users/translate/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/translate/subscriptions","organizations_url":"https://api.github.com/users/translate/orgs","repos_url":"https://api.github.com/users/translate/repos","events_url":"https://api.github.com/users/translate/events{/privacy}","received_events_url":"https://api.github.com/users/translate/received_events","type":"Organization","site_admin":false},"repo":{"id":3769702,"name":"pootle","full_name":"translate/pootle","owner":{"login":"translate","id":1538178,"avatar_url":"https://avatars.githubusercontent.com/u/1538178?v=3","gravatar_id":"","url":"https://api.github.com/users/translate","html_url":"https://github.com/translate","followers_url":"https://api.github.com/users/translate/followers","following_url":"https://api.github.com/users/translate/following{/other_user}","gists_url":"https://api.github.com/users/translate/gists{/gist_id}","starred_url":"https://api.github.com/users/translate/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/translate/subscriptions","organizations_url":"https://api.github.com/users/translate/orgs","repos_url":"https://api.github.com/users/translate/repos","events_url":"https://api.github.com/users/translate/events{/privacy}","received_events_url":"https://api.github.com/users/translate/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/translate/pootle","description":"Online translation tool","fork":false,"url":"https://api.github.com/repos/translate/pootle","forks_url":"https://api.github.com/repos/translate/pootle/forks","keys_url":"https://api.github.com/repos/translate/pootle/keys{/key_id}","collaborators_url":"https://api.github.com/repos/translate/pootle/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/translate/pootle/teams","hooks_url":"https://api.github.com/repos/translate/pootle/hooks","issue_events_url":"https://api.github.com/repos/translate/pootle/issues/events{/number}","events_url":"https://api.github.com/repos/translate/pootle/events","assignees_url":"https://api.github.com/repos/translate/pootle/assignees{/user}","branches_url":"https://api.github.com/repos/translate/pootle/branches{/branch}","tags_url":"https://api.github.com/repos/translate/pootle/tags","blobs_url":"https://api.github.com/repos/translate/pootle/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/translate/pootle/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/translate/pootle/git/refs{/sha}","trees_url":"https://api.github.com/repos/translate/pootle/git/trees{/sha}","statuses_url":"https://api.github.com/repos/translate/pootle/statuses/{sha}","languages_url":"https://api.github.com/repos/translate/pootle/languages","stargazers_url":"https://api.github.com/repos/translate/pootle/stargazers","contributors_url":"https://api.github.com/repos/translate/pootle/contributors","subscribers_url":"https://api.github.com/repos/translate/pootle/subscribers","subscription_url":"https://api.github.com/repos/translate/pootle/subscription","commits_url":"https://api.github.com/repos/translate/pootle/commits{/sha}","git_commits_url":"https://api.github.com/repos/translate/pootle/git/commits{/sha}","comments_url":"https://api.github.com/repos/translate/pootle/comments{/number}","issue_comment_url":"https://api.github.com/repos/translate/pootle/issues/comments{/number}","contents_url":"https://api.github.com/repos/translate/pootle/contents/{+path}","compare_url":"https://api.github.com/repos/translate/pootle/compare/{base}...{head}","merges_url":"https://api.github.com/repos/translate/pootle/merges","archive_url":"https://api.github.com/repos/translate/pootle/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/translate/pootle/downloads","issues_url":"https://api.github.com/repos/translate/pootle/issues{/number}","pulls_url":"https://api.github.com/repos/translate/pootle/pulls{/number}","milestones_url":"https://api.github.com/repos/translate/pootle/milestones{/number}","notifications_url":"https://api.github.com/repos/translate/pootle/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/translate/pootle/labels{/name}","releases_url":"https://api.github.com/repos/translate/pootle/releases{/id}","created_at":"2012-03-19T23:06:03Z","updated_at":"2015-09-14T17:10:32Z","pushed_at":"2015-09-17T15:22:19Z","git_url":"git://github.com/translate/pootle.git","ssh_url":"git@github.com:translate/pootle.git","clone_url":"https://github.com/translate/pootle.git","svn_url":"https://github.com/translate/pootle","homepage":"http://pootle.translatehouse.org","size":87379,"stargazers_count":509,"watchers_count":509,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":156,"mirror_url":null,"open_issues_count":240,"forks":156,"open_issues":240,"watchers":509,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/translate/pootle/pulls/4067"},"html":{"href":"https://github.com/translate/pootle/pull/4067"},"issue":{"href":"https://api.github.com/repos/translate/pootle/issues/4067"},"comments":{"href":"https://api.github.com/repos/translate/pootle/issues/4067/comments"},"review_comments":{"href":"https://api.github.com/repos/translate/pootle/pulls/4067/comments"},"review_comment":{"href":"https://api.github.com/repos/translate/pootle/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/translate/pootle/pulls/4067/commits"},"statuses":{"href":"https://api.github.com/repos/translate/pootle/statuses/e3e2825ff5bef4a637dd7d4b336ab4aa9005a94d"}}}}