{"action":"created","comment":{"url":"https://api.github.com/repos/translate/pootle/pulls/comments/31606503","id":31606503,"diff_hunk":"@@ -0,0 +1,59 @@\n+.. _deprecation:\n+\n+Deprecation\n+===========\n+\n+From time to time features, commands, configurations will be deprecated.  We\n+deprecate and manage backward compatibility within the following guidelines:\n+\n+1. Our priority is the movement of Pootle development forward.  Thus:\n+\n+   1. We don't want to have to maintain backward compatability for too long as\n+      it hampers forward mobility.\n+   2. We won't maintain backward compatibility if that prevents or impacts the\n+      needs of the new feature, refactoring, etc.\n+   3. We won't maintain backward compatibility if the cost of that far\n+      outweights the effort of reconfiguring Pootle.\n+\n+2. We don't want there to be major distruptions that we can avoid with point\n+   release.  That is it shuouldn't be painful as we shift features.\n+3. Nothing is forever.  We won't maintain deprecation or backward compatibility\n+   for long.\n+\n+\n+The \"rules\" of deprecation\n+--------------------------\n+\n+So some rough \"rules\".  These apply to features, management commands and\n+settings.\n+\n+1. If it's **not released**.  Drop it and tell others on `#pootle-dev\n+   <irc://irc.freenode.net/#pootle-dev>`_.  If it has settings add them to the\n+   settings deprecation infrastructure to force removal if required.\n+2. If it is **obsolete or replaced** with an equivalent then drop with no\n+   fanfare and add settings to the deprecation infrastructure so that an admin\n+   will remove settings from their settings files.  Add to release notes if\n+   needed.\n+3. If it has been **renamed**.  Put that in the release notes and allow\n+   fallback for one version.  Use deprecation infrastructure for settings to\n+   allow old settings to continue to work until the N+1 release.  After that\n+   its a hard failure.  For commands simply rename.\n+4. If things **changed**.  For settings put that in release notes and do a hard\n+   failure to ensure that admins will reconfigured.  For commands, just put","path":"docs/developers/deprecation.rst","position":42,"original_position":42,"commit_id":"5cdc71cbb8fc70d5ac16616a63dc2f036b91e790","original_commit_id":"5cdc71cbb8fc70d5ac16616a63dc2f036b91e790","user":{"login":"julen","id":16768,"avatar_url":"https://avatars.githubusercontent.com/u/16768?v=3","gravatar_id":"","url":"https://api.github.com/users/julen","html_url":"https://github.com/julen","followers_url":"https://api.github.com/users/julen/followers","following_url":"https://api.github.com/users/julen/following{/other_user}","gists_url":"https://api.github.com/users/julen/gists{/gist_id}","starred_url":"https://api.github.com/users/julen/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/julen/subscriptions","organizations_url":"https://api.github.com/users/julen/orgs","repos_url":"https://api.github.com/users/julen/repos","events_url":"https://api.github.com/users/julen/events{/privacy}","received_events_url":"https://api.github.com/users/julen/received_events","type":"User","site_admin":false},"body":"*reconfigure*","created_at":"2015-06-03T09:25:08Z","updated_at":"2015-06-03T09:25:08Z","html_url":"https://github.com/translate/pootle/pull/3760#discussion_r31606503","pull_request_url":"https://api.github.com/repos/translate/pootle/pulls/3760","_links":{"self":{"href":"https://api.github.com/repos/translate/pootle/pulls/comments/31606503"},"html":{"href":"https://github.com/translate/pootle/pull/3760#discussion_r31606503"},"pull_request":{"href":"https://api.github.com/repos/translate/pootle/pulls/3760"}}},"pull_request":{"url":"https://api.github.com/repos/translate/pootle/pulls/3760","id":36095667,"html_url":"https://github.com/translate/pootle/pull/3760","diff_url":"https://github.com/translate/pootle/pull/3760.diff","patch_url":"https://github.com/translate/pootle/pull/3760.patch","issue_url":"https://api.github.com/repos/translate/pootle/issues/3760","number":3760,"state":"open","locked":false,"title":"Prefixing settings with POOTLE_ and handling needed deprecations","user":{"login":"dwaynebailey","id":647438,"avatar_url":"https://avatars.githubusercontent.com/u/647438?v=3","gravatar_id":"","url":"https://api.github.com/users/dwaynebailey","html_url":"https://github.com/dwaynebailey","followers_url":"https://api.github.com/users/dwaynebailey/followers","following_url":"https://api.github.com/users/dwaynebailey/following{/other_user}","gists_url":"https://api.github.com/users/dwaynebailey/gists{/gist_id}","starred_url":"https://api.github.com/users/dwaynebailey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dwaynebailey/subscriptions","organizations_url":"https://api.github.com/users/dwaynebailey/orgs","repos_url":"https://api.github.com/users/dwaynebailey/repos","events_url":"https://api.github.com/users/dwaynebailey/events{/privacy}","received_events_url":"https://api.github.com/users/dwaynebailey/received_events","type":"User","site_admin":false},"body":"This is an attempt to address #3757 and it includes the following:\r\n\r\n1. An approach to deprecation using Django checks framework and a 96-deprecation.conf file.\r\n2. Migrating some settings to POOTLE_ and adding them to the deprecation settings.\r\n\r\nDeprecation will mostly give info if there are deprecated settings.  It will warn if you haven't set the new setting but will copy the old setting to the new.  If it is still unchanged when we hit the removal date then it raises a critical error.  Pootle hangs then, it should exit nicely, but it achieves the same aim... Pootle doesn't run.\r\n\r\nI haven't documented the deprecation rationale yet. But my thinking is to deprecate as fast as possible.","created_at":"2015-05-23T23:50:49Z","updated_at":"2015-06-03T09:25:09Z","closed_at":null,"merged_at":null,"merge_commit_sha":"43891c303efeafe9a840e28b8d056a2282c0c6d2","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/translate/pootle/pulls/3760/commits","review_comments_url":"https://api.github.com/repos/translate/pootle/pulls/3760/comments","review_comment_url":"https://api.github.com/repos/translate/pootle/pulls/comments{/number}","comments_url":"https://api.github.com/repos/translate/pootle/issues/3760/comments","statuses_url":"https://api.github.com/repos/translate/pootle/statuses/5cdc71cbb8fc70d5ac16616a63dc2f036b91e790","head":{"label":"dwaynebailey:feature/deprecation","ref":"feature/deprecation","sha":"5cdc71cbb8fc70d5ac16616a63dc2f036b91e790","user":{"login":"dwaynebailey","id":647438,"avatar_url":"https://avatars.githubusercontent.com/u/647438?v=3","gravatar_id":"","url":"https://api.github.com/users/dwaynebailey","html_url":"https://github.com/dwaynebailey","followers_url":"https://api.github.com/users/dwaynebailey/followers","following_url":"https://api.github.com/users/dwaynebailey/following{/other_user}","gists_url":"https://api.github.com/users/dwaynebailey/gists{/gist_id}","starred_url":"https://api.github.com/users/dwaynebailey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dwaynebailey/subscriptions","organizations_url":"https://api.github.com/users/dwaynebailey/orgs","repos_url":"https://api.github.com/users/dwaynebailey/repos","events_url":"https://api.github.com/users/dwaynebailey/events{/privacy}","received_events_url":"https://api.github.com/users/dwaynebailey/received_events","type":"User","site_admin":false},"repo":{"id":10171405,"name":"pootle","full_name":"dwaynebailey/pootle","owner":{"login":"dwaynebailey","id":647438,"avatar_url":"https://avatars.githubusercontent.com/u/647438?v=3","gravatar_id":"","url":"https://api.github.com/users/dwaynebailey","html_url":"https://github.com/dwaynebailey","followers_url":"https://api.github.com/users/dwaynebailey/followers","following_url":"https://api.github.com/users/dwaynebailey/following{/other_user}","gists_url":"https://api.github.com/users/dwaynebailey/gists{/gist_id}","starred_url":"https://api.github.com/users/dwaynebailey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dwaynebailey/subscriptions","organizations_url":"https://api.github.com/users/dwaynebailey/orgs","repos_url":"https://api.github.com/users/dwaynebailey/repos","events_url":"https://api.github.com/users/dwaynebailey/events{/privacy}","received_events_url":"https://api.github.com/users/dwaynebailey/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/dwaynebailey/pootle","description":"Online translation tool","fork":true,"url":"https://api.github.com/repos/dwaynebailey/pootle","forks_url":"https://api.github.com/repos/dwaynebailey/pootle/forks","keys_url":"https://api.github.com/repos/dwaynebailey/pootle/keys{/key_id}","collaborators_url":"https://api.github.com/repos/dwaynebailey/pootle/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/dwaynebailey/pootle/teams","hooks_url":"https://api.github.com/repos/dwaynebailey/pootle/hooks","issue_events_url":"https://api.github.com/repos/dwaynebailey/pootle/issues/events{/number}","events_url":"https://api.github.com/repos/dwaynebailey/pootle/events","assignees_url":"https://api.github.com/repos/dwaynebailey/pootle/assignees{/user}","branches_url":"https://api.github.com/repos/dwaynebailey/pootle/branches{/branch}","tags_url":"https://api.github.com/repos/dwaynebailey/pootle/tags","blobs_url":"https://api.github.com/repos/dwaynebailey/pootle/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/dwaynebailey/pootle/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/dwaynebailey/pootle/git/refs{/sha}","trees_url":"https://api.github.com/repos/dwaynebailey/pootle/git/trees{/sha}","statuses_url":"https://api.github.com/repos/dwaynebailey/pootle/statuses/{sha}","languages_url":"https://api.github.com/repos/dwaynebailey/pootle/languages","stargazers_url":"https://api.github.com/repos/dwaynebailey/pootle/stargazers","contributors_url":"https://api.github.com/repos/dwaynebailey/pootle/contributors","subscribers_url":"https://api.github.com/repos/dwaynebailey/pootle/subscribers","subscription_url":"https://api.github.com/repos/dwaynebailey/pootle/subscription","commits_url":"https://api.github.com/repos/dwaynebailey/pootle/commits{/sha}","git_commits_url":"https://api.github.com/repos/dwaynebailey/pootle/git/commits{/sha}","comments_url":"https://api.github.com/repos/dwaynebailey/pootle/comments{/number}","issue_comment_url":"https://api.github.com/repos/dwaynebailey/pootle/issues/comments{/number}","contents_url":"https://api.github.com/repos/dwaynebailey/pootle/contents/{+path}","compare_url":"https://api.github.com/repos/dwaynebailey/pootle/compare/{base}...{head}","merges_url":"https://api.github.com/repos/dwaynebailey/pootle/merges","archive_url":"https://api.github.com/repos/dwaynebailey/pootle/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/dwaynebailey/pootle/downloads","issues_url":"https://api.github.com/repos/dwaynebailey/pootle/issues{/number}","pulls_url":"https://api.github.com/repos/dwaynebailey/pootle/pulls{/number}","milestones_url":"https://api.github.com/repos/dwaynebailey/pootle/milestones{/number}","notifications_url":"https://api.github.com/repos/dwaynebailey/pootle/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/dwaynebailey/pootle/labels{/name}","releases_url":"https://api.github.com/repos/dwaynebailey/pootle/releases{/id}","created_at":"2013-05-20T11:29:39Z","updated_at":"2015-05-08T12:27:15Z","pushed_at":"2015-06-02T23:12:52Z","git_url":"git://github.com/dwaynebailey/pootle.git","ssh_url":"git@github.com:dwaynebailey/pootle.git","clone_url":"https://github.com/dwaynebailey/pootle.git","svn_url":"https://github.com/dwaynebailey/pootle","homepage":"http://pootle.translatehouse.org","size":67403,"stargazers_count":0,"watchers_count":0,"language":"Python","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":0,"default_branch":"master"}},"base":{"label":"translate:master","ref":"master","sha":"512395d48048040140e5c74c19d1d6cbfb6203ea","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-06-02T06:25:31Z","pushed_at":"2015-06-02T23:12:53Z","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":78362,"stargazers_count":452,"watchers_count":452,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":137,"mirror_url":null,"open_issues_count":393,"forks":137,"open_issues":393,"watchers":452,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/translate/pootle/pulls/3760"},"html":{"href":"https://github.com/translate/pootle/pull/3760"},"issue":{"href":"https://api.github.com/repos/translate/pootle/issues/3760"},"comments":{"href":"https://api.github.com/repos/translate/pootle/issues/3760/comments"},"review_comments":{"href":"https://api.github.com/repos/translate/pootle/pulls/3760/comments"},"review_comment":{"href":"https://api.github.com/repos/translate/pootle/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/translate/pootle/pulls/3760/commits"},"statuses":{"href":"https://api.github.com/repos/translate/pootle/statuses/5cdc71cbb8fc70d5ac16616a63dc2f036b91e790"}}}}