{"action":"created","comment":{"url":"https://api.github.com/repos/ocaml/opam/pulls/comments/54360980","id":54360980,"diff_hunk":"@@ -823,10 +826,13 @@ module ConfigSyntax = struct\n                (kind,criterion)::List.remove_assoc kind t.solver_criteria }\n   let with_solver t solver = { t with solver = Some solver }\n \n+  let backup_url_ocamlpro = \"http://opam.ocamlpro.com/backup\"","path":"src/format/opamFile.ml","position":28,"original_position":28,"commit_id":"f301b81c55427d1c590e4d2b4e05bc9a3771a46b","original_commit_id":"f301b81c55427d1c590e4d2b4e05bc9a3771a46b","user":{"login":"AltGr","id":807966,"avatar_url":"https://avatars.githubusercontent.com/u/807966?v=3","gravatar_id":"","url":"https://api.github.com/users/AltGr","html_url":"https://github.com/AltGr","followers_url":"https://api.github.com/users/AltGr/followers","following_url":"https://api.github.com/users/AltGr/following{/other_user}","gists_url":"https://api.github.com/users/AltGr/gists{/gist_id}","starred_url":"https://api.github.com/users/AltGr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AltGr/subscriptions","organizations_url":"https://api.github.com/users/AltGr/orgs","repos_url":"https://api.github.com/users/AltGr/repos","events_url":"https://api.github.com/users/AltGr/events{/privacy}","received_events_url":"https://api.github.com/users/AltGr/received_events","type":"User","site_admin":false},"body":"I would rather use this value when initialising the original config file (at `opam init` time, in `OpamClient`) than set it in the \"empty\" data structure. This way it can be seen and removed by hand later on. An initial default rather than a permanent, hidden default.\r\nAlso, the printer for lists assumes that an empty field of type list is the empty list, so this may cause issues -- e.g. you can't actually unset the field, or it reappears if opam reprints the file.","created_at":"2016-02-29T00:55:55Z","updated_at":"2016-02-29T00:55:55Z","html_url":"https://github.com/ocaml/opam/pull/2449#discussion_r54360980","pull_request_url":"https://api.github.com/repos/ocaml/opam/pulls/2449","_links":{"self":{"href":"https://api.github.com/repos/ocaml/opam/pulls/comments/54360980"},"html":{"href":"https://github.com/ocaml/opam/pull/2449#discussion_r54360980"},"pull_request":{"href":"https://api.github.com/repos/ocaml/opam/pulls/2449"}}},"pull_request":{"url":"https://api.github.com/repos/ocaml/opam/pulls/2449","id":60978979,"html_url":"https://github.com/ocaml/opam/pull/2449","diff_url":"https://github.com/ocaml/opam/pull/2449.diff","patch_url":"https://github.com/ocaml/opam/pull/2449.patch","issue_url":"https://api.github.com/repos/ocaml/opam/issues/2449","number":2449,"state":"open","locked":false,"title":"Add automatic fallbacks using backup-urls","user":{"login":"lefessan","id":514957,"avatar_url":"https://avatars.githubusercontent.com/u/514957?v=3","gravatar_id":"","url":"https://api.github.com/users/lefessan","html_url":"https://github.com/lefessan","followers_url":"https://api.github.com/users/lefessan/followers","following_url":"https://api.github.com/users/lefessan/following{/other_user}","gists_url":"https://api.github.com/users/lefessan/gists{/gist_id}","starred_url":"https://api.github.com/users/lefessan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lefessan/subscriptions","organizations_url":"https://api.github.com/users/lefessan/orgs","repos_url":"https://api.github.com/users/lefessan/repos","events_url":"https://api.github.com/users/lefessan/events{/privacy}","received_events_url":"https://api.github.com/users/lefessan/received_events","type":"User","site_admin":false},"body":"This PR provides a solution to the problem of archives becoming unavailable (because the site is down, or because the compression algorithm changed). It is based on looking up archives, on failure, from a configuration parameter called `backup-urls`, that is initially initialized to OCamlPro's backup of archives (http://opam.ocamlpro.com/backup).\r\n\r\nInitial configuration:\r\nbackup-urls: [ \"http://opam.ocamlpro.com/backup\" ]\r\n\r\nDisabling the feature:\r\nbackup-urls: []\r\n","created_at":"2016-02-28T05:15:17Z","updated_at":"2016-02-29T00:55:55Z","closed_at":null,"merged_at":null,"merge_commit_sha":"f4384eb61853fcad11af89c8f1a768ef29b5bb22","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/ocaml/opam/pulls/2449/commits","review_comments_url":"https://api.github.com/repos/ocaml/opam/pulls/2449/comments","review_comment_url":"https://api.github.com/repos/ocaml/opam/pulls/comments{/number}","comments_url":"https://api.github.com/repos/ocaml/opam/issues/2449/comments","statuses_url":"https://api.github.com/repos/ocaml/opam/statuses/f301b81c55427d1c590e4d2b4e05bc9a3771a46b","head":{"label":"lefessan:2016-02-27-add-backup-urls-mirroring","ref":"2016-02-27-add-backup-urls-mirroring","sha":"f301b81c55427d1c590e4d2b4e05bc9a3771a46b","user":{"login":"lefessan","id":514957,"avatar_url":"https://avatars.githubusercontent.com/u/514957?v=3","gravatar_id":"","url":"https://api.github.com/users/lefessan","html_url":"https://github.com/lefessan","followers_url":"https://api.github.com/users/lefessan/followers","following_url":"https://api.github.com/users/lefessan/following{/other_user}","gists_url":"https://api.github.com/users/lefessan/gists{/gist_id}","starred_url":"https://api.github.com/users/lefessan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lefessan/subscriptions","organizations_url":"https://api.github.com/users/lefessan/orgs","repos_url":"https://api.github.com/users/lefessan/repos","events_url":"https://api.github.com/users/lefessan/events{/privacy}","received_events_url":"https://api.github.com/users/lefessan/received_events","type":"User","site_admin":false},"repo":{"id":5612899,"name":"opam","full_name":"lefessan/opam","owner":{"login":"lefessan","id":514957,"avatar_url":"https://avatars.githubusercontent.com/u/514957?v=3","gravatar_id":"","url":"https://api.github.com/users/lefessan","html_url":"https://github.com/lefessan","followers_url":"https://api.github.com/users/lefessan/followers","following_url":"https://api.github.com/users/lefessan/following{/other_user}","gists_url":"https://api.github.com/users/lefessan/gists{/gist_id}","starred_url":"https://api.github.com/users/lefessan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lefessan/subscriptions","organizations_url":"https://api.github.com/users/lefessan/orgs","repos_url":"https://api.github.com/users/lefessan/repos","events_url":"https://api.github.com/users/lefessan/events{/privacy}","received_events_url":"https://api.github.com/users/lefessan/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/lefessan/opam","description":"OPAM - A package manager for OCaml","fork":true,"url":"https://api.github.com/repos/lefessan/opam","forks_url":"https://api.github.com/repos/lefessan/opam/forks","keys_url":"https://api.github.com/repos/lefessan/opam/keys{/key_id}","collaborators_url":"https://api.github.com/repos/lefessan/opam/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/lefessan/opam/teams","hooks_url":"https://api.github.com/repos/lefessan/opam/hooks","issue_events_url":"https://api.github.com/repos/lefessan/opam/issues/events{/number}","events_url":"https://api.github.com/repos/lefessan/opam/events","assignees_url":"https://api.github.com/repos/lefessan/opam/assignees{/user}","branches_url":"https://api.github.com/repos/lefessan/opam/branches{/branch}","tags_url":"https://api.github.com/repos/lefessan/opam/tags","blobs_url":"https://api.github.com/repos/lefessan/opam/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/lefessan/opam/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/lefessan/opam/git/refs{/sha}","trees_url":"https://api.github.com/repos/lefessan/opam/git/trees{/sha}","statuses_url":"https://api.github.com/repos/lefessan/opam/statuses/{sha}","languages_url":"https://api.github.com/repos/lefessan/opam/languages","stargazers_url":"https://api.github.com/repos/lefessan/opam/stargazers","contributors_url":"https://api.github.com/repos/lefessan/opam/contributors","subscribers_url":"https://api.github.com/repos/lefessan/opam/subscribers","subscription_url":"https://api.github.com/repos/lefessan/opam/subscription","commits_url":"https://api.github.com/repos/lefessan/opam/commits{/sha}","git_commits_url":"https://api.github.com/repos/lefessan/opam/git/commits{/sha}","comments_url":"https://api.github.com/repos/lefessan/opam/comments{/number}","issue_comment_url":"https://api.github.com/repos/lefessan/opam/issues/comments{/number}","contents_url":"https://api.github.com/repos/lefessan/opam/contents/{+path}","compare_url":"https://api.github.com/repos/lefessan/opam/compare/{base}...{head}","merges_url":"https://api.github.com/repos/lefessan/opam/merges","archive_url":"https://api.github.com/repos/lefessan/opam/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/lefessan/opam/downloads","issues_url":"https://api.github.com/repos/lefessan/opam/issues{/number}","pulls_url":"https://api.github.com/repos/lefessan/opam/pulls{/number}","milestones_url":"https://api.github.com/repos/lefessan/opam/milestones{/number}","notifications_url":"https://api.github.com/repos/lefessan/opam/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/lefessan/opam/labels{/name}","releases_url":"https://api.github.com/repos/lefessan/opam/releases{/id}","deployments_url":"https://api.github.com/repos/lefessan/opam/deployments","created_at":"2012-08-30T09:22:57Z","updated_at":"2015-04-12T13:14:14Z","pushed_at":"2016-02-28T05:08:54Z","git_url":"git://github.com/lefessan/opam.git","ssh_url":"git@github.com:lefessan/opam.git","clone_url":"https://github.com/lefessan/opam.git","svn_url":"https://github.com/lefessan/opam","homepage":"","size":26832,"stargazers_count":1,"watchers_count":1,"language":"OCaml","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":1,"default_branch":"master"}},"base":{"label":"ocaml:master","ref":"master","sha":"70e13de055e10226f578100c8cf1af023059b100","user":{"login":"ocaml","id":1841483,"avatar_url":"https://avatars.githubusercontent.com/u/1841483?v=3","gravatar_id":"","url":"https://api.github.com/users/ocaml","html_url":"https://github.com/ocaml","followers_url":"https://api.github.com/users/ocaml/followers","following_url":"https://api.github.com/users/ocaml/following{/other_user}","gists_url":"https://api.github.com/users/ocaml/gists{/gist_id}","starred_url":"https://api.github.com/users/ocaml/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ocaml/subscriptions","organizations_url":"https://api.github.com/users/ocaml/orgs","repos_url":"https://api.github.com/users/ocaml/repos","events_url":"https://api.github.com/users/ocaml/events{/privacy}","received_events_url":"https://api.github.com/users/ocaml/received_events","type":"Organization","site_admin":false},"repo":{"id":3473767,"name":"opam","full_name":"ocaml/opam","owner":{"login":"ocaml","id":1841483,"avatar_url":"https://avatars.githubusercontent.com/u/1841483?v=3","gravatar_id":"","url":"https://api.github.com/users/ocaml","html_url":"https://github.com/ocaml","followers_url":"https://api.github.com/users/ocaml/followers","following_url":"https://api.github.com/users/ocaml/following{/other_user}","gists_url":"https://api.github.com/users/ocaml/gists{/gist_id}","starred_url":"https://api.github.com/users/ocaml/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ocaml/subscriptions","organizations_url":"https://api.github.com/users/ocaml/orgs","repos_url":"https://api.github.com/users/ocaml/repos","events_url":"https://api.github.com/users/ocaml/events{/privacy}","received_events_url":"https://api.github.com/users/ocaml/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/ocaml/opam","description":"OPAM is a source-based package manager for OCaml. It supports multiple simultaneous compiler installations, flexible package constraints, and a Git-friendly development workflow.","fork":false,"url":"https://api.github.com/repos/ocaml/opam","forks_url":"https://api.github.com/repos/ocaml/opam/forks","keys_url":"https://api.github.com/repos/ocaml/opam/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ocaml/opam/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ocaml/opam/teams","hooks_url":"https://api.github.com/repos/ocaml/opam/hooks","issue_events_url":"https://api.github.com/repos/ocaml/opam/issues/events{/number}","events_url":"https://api.github.com/repos/ocaml/opam/events","assignees_url":"https://api.github.com/repos/ocaml/opam/assignees{/user}","branches_url":"https://api.github.com/repos/ocaml/opam/branches{/branch}","tags_url":"https://api.github.com/repos/ocaml/opam/tags","blobs_url":"https://api.github.com/repos/ocaml/opam/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ocaml/opam/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ocaml/opam/git/refs{/sha}","trees_url":"https://api.github.com/repos/ocaml/opam/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ocaml/opam/statuses/{sha}","languages_url":"https://api.github.com/repos/ocaml/opam/languages","stargazers_url":"https://api.github.com/repos/ocaml/opam/stargazers","contributors_url":"https://api.github.com/repos/ocaml/opam/contributors","subscribers_url":"https://api.github.com/repos/ocaml/opam/subscribers","subscription_url":"https://api.github.com/repos/ocaml/opam/subscription","commits_url":"https://api.github.com/repos/ocaml/opam/commits{/sha}","git_commits_url":"https://api.github.com/repos/ocaml/opam/git/commits{/sha}","comments_url":"https://api.github.com/repos/ocaml/opam/comments{/number}","issue_comment_url":"https://api.github.com/repos/ocaml/opam/issues/comments{/number}","contents_url":"https://api.github.com/repos/ocaml/opam/contents/{+path}","compare_url":"https://api.github.com/repos/ocaml/opam/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ocaml/opam/merges","archive_url":"https://api.github.com/repos/ocaml/opam/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ocaml/opam/downloads","issues_url":"https://api.github.com/repos/ocaml/opam/issues{/number}","pulls_url":"https://api.github.com/repos/ocaml/opam/pulls{/number}","milestones_url":"https://api.github.com/repos/ocaml/opam/milestones{/number}","notifications_url":"https://api.github.com/repos/ocaml/opam/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ocaml/opam/labels{/name}","releases_url":"https://api.github.com/repos/ocaml/opam/releases{/id}","deployments_url":"https://api.github.com/repos/ocaml/opam/deployments","created_at":"2012-02-17T20:55:44Z","updated_at":"2016-02-27T20:33:31Z","pushed_at":"2016-02-28T05:15:18Z","git_url":"git://github.com/ocaml/opam.git","ssh_url":"git@github.com:ocaml/opam.git","clone_url":"https://github.com/ocaml/opam.git","svn_url":"https://github.com/ocaml/opam","homepage":"http://opam.ocaml.org","size":28502,"stargazers_count":396,"watchers_count":396,"language":"OCaml","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":129,"mirror_url":null,"open_issues_count":247,"forks":129,"open_issues":247,"watchers":396,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/ocaml/opam/pulls/2449"},"html":{"href":"https://github.com/ocaml/opam/pull/2449"},"issue":{"href":"https://api.github.com/repos/ocaml/opam/issues/2449"},"comments":{"href":"https://api.github.com/repos/ocaml/opam/issues/2449/comments"},"review_comments":{"href":"https://api.github.com/repos/ocaml/opam/pulls/2449/comments"},"review_comment":{"href":"https://api.github.com/repos/ocaml/opam/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/ocaml/opam/pulls/2449/commits"},"statuses":{"href":"https://api.github.com/repos/ocaml/opam/statuses/f301b81c55427d1c590e4d2b4e05bc9a3771a46b"}}}}