urls.ml 20.1 KB
Newer Older
1 2 3 4 5 6
(* TODO: MAP PAGES THAT HAVE NO EQUIVALENT IN NEW SITE:
 *
 * *)
(* (OLD URL, NEW URL) *)
let old_to_new =
  (* NO EQUIVALENT *)
Dario Pinto's avatar
Dario Pinto committed
7
  [ ( "https://www.ocamlpro.com/pre-inscription-a-une-session-de-formation-inter-entreprises/"
8
    , "/" )
9
  ; ("https://www.ocamlpro.com/fr/preinscription-aux-formations-ocamlpro/", "/")
10 11 12 13
  ]
  (* LEAD TO 404 *)
  @ [ ("https://www.ocamlpro.com/2017/05/04/opam-build", "404")
    ; ("https://www.ocamlpro.com/2018/07/26/opam-2-0-0-rc3", "404")
14 15 16 17
    ; ("https://files.ocamlpro.com/pub/opam-full-latest.tar.gz", "404")
    ; ("https://files.ocamlpro.com/pub/opam-full-1.1.0.tar.gz", "404")
    ; ("https://www.ocamlpro.com/blog/2013/03/14/opam-1.0.0.html", "404")
    ; ("https://files.ocamlpro.com/files/tuareg-mode-with-ppx.el", "404")
Dario Pinto's avatar
Dario Pinto committed
18
    ; ("http://ocamlpro.com/pub/ny-meetup.pdf", "404" )
19 20 21
    ]
  (* PAGES STATIQUES FR *)
  @ [ ("/fr/accueil/", "/index")
22 23
    ; ("/fr/accueil", "/index")
    ; ("/fr/recrutement-ocamlpro", "/index")
Dario Pinto's avatar
Dario Pinto committed
24
    ; ("/fr/recrutement-ocamlpro/", "/index")
25 26
    ; ("/fr/lequipe-ocamlpro", "/team")
    ; ("/fr/lequipe-ocamlpro/", "/team")
27
    ; ("/fr/accueil/formations", "/index")
28 29 30 31 32 33
    ; ("/fr/accueil/formations/", "/index")
    ; ( "/fr/formation-maitriser-opam-et-les-outils-ocaml"
      , "/course_mastering_opam_ocaml_tools" )
    ; ( "/fr/formation-maitriser-opam-et-les-outils-ocaml/"
      , "/course_mastering_opam_ocaml_tools" )
    ; ("/fr/mentions-legales", "/legal-notice")
34 35
    ; ("/fr/mentions-legales/", "/legal-notice")
    ; ("/fr/formation-expert-ocaml", "/course_ocaml_expert")
36
    ; ("/fr/formation-expert-ocaml/", "/course_ocaml_expert")
37
    ; ("/fr/formation-rust", "/course_rust_vocational_training")
38
    ; ("/fr/formation-rust/", "/course_rust_vocational_training")
39
    ; ("/fr/recherche-developpement", "/research-and-development")
40 41 42
    ; ("/fr/recherche-developpement/", "/research-and-development")
    ; ("/fr/formation-passer-a-ocaml", "/course_ocaml_development")
    ; ("/fr/formation-passer-a-ocaml/", "/course_ocaml_development")
43
    ; ("/fr/formation-optimiser-du-code-ocaml", "/course_ocaml_code_opti")
44 45 46 47 48
    ; ("/fr/formation-optimiser-du-code-ocaml/", "/course_ocaml_code_opti")
    ]
  (* STATIC PAGES *)
  @ [ ("/", "/index")
    ; ("/team", "/team")
49 50 51
    ; ("/team/", "/team")
    ; ("/training-ocamlpro", "/")
    ; ("/training-ocamlpro/", "/")
52
    ; ("/legal-notice", "/legal-notice")
53
    ; ("/legal-notice/", "/legal-notice")
54
    ; ("/mentions-legales", "/legal-notice")
55 56
    ; ("/mentions-legales/", "/legal-notice")
    ; ("/research-and-development", "/research-and-development")
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
    ; ("/research-and-development/", "/research-and-development")
    ]
  (* COURSE PAGES *)
  @ [ ( "/course-mastering-opam-ocamls-tooling/"
      , "/course_mastering_opam_ocaml_tools" )
    ; ("/course-ocaml-expert/", "/course_ocaml_expert")
    ; ("/course-ocaml-development/", "/course_ocaml_development")
    ; ("/course-ocaml-code-optimization/", "/course_ocaml_code_opti")
    ; ("/rust-vocational-training-2/", "/course_rust_vocational_training")
    ]
  (* AUTHORS *)
  @ [ ("/fr/author/lefessan/", "/blog/authors/fabrice_le_fessant")
    ; ("/fr/author/acoquer/", "/blog/authors/albin_coquereau")
    ; ("/fr/author/adrien/", "/blog/authors/adrien_champion")
    ; ("/fr/author/aurore/", "/blog/authors/aurore_dromby")
    ; ("/fr/author/cagdas/", "/blog/authors/cagdas_bozman")
    ; ("/fr/author/louis/", "/blog/authors/louis_gesbert")
    ; ("/fr/author/thomas/", "/blog/authors/thomas_blanc")
    ; ("/fr/author/ocamlpro/", "/blog/authors/ocamlpro")
    ; ("/fr/author/raja/", "/blog/authors/raja_boujbel")
    ; ("/fr/author/leob/", "/blog/authors/leo_boitel")
    ; ("/fr/author/muriel/", "/blog/authors/muriel")
    ; ("/fr/author/vincent/", "?")
80
    ; ("/fr/author/alain/", "/blog/authors/alain_mebsout")
81
    ]
82
  (* CATEGORIES EN *)
Dario Pinto's avatar
Dario Pinto committed
83 84 85 86 87 88 89 90 91 92 93
  @ [ ("/category/ocaml-opam-tooling/", "/blog/category/tooling")
    ; ("/category/alt-ergo/", "/blog/category/formal_methods")
    ; ("/category/trainings/", "/blog/category/trainings")
    ; ("/category/ocamlpro/", "/blog/category/ocamlpro")
    ; ("/category/blockchains/", "/blog/category/blockchains")
    ; ("/category/blog", "")
    ; ("/category/flambda/", "/blog/category/ocaml")
    ; ("/category/highlights/", "/blog/category/ocamlpro")
    ; ("/category/opam/", "/blog/category/tooling")
    ; ("/category/rust/", "/blog/category/rust")
    ; ("/category/ocaml/", "/blog/category/ocaml")
94 95 96 97 98 99 100 101 102 103 104 105 106
    ]
  (* CATEGORIES FR *)
  @ [ ("/fr/category/ocaml-opam-tooling-fr/", "/blog/category/tooling")
    ; ("/fr/category/alt-ergo-fr/", "/blog/category/formal_methods")
    ; ("/fr/category/formations/", "/blog/category/trainings")
    ; ("/fr/category/ocamlpro-fr/", "/blog/category/ocamlpro")
    ; ("/fr/category/blockchains-fr/", "/blog/category/blockchains")
    ; ("/fr/category/blog-fr/", "")
    ; ("/fr/category/flambda-fr/", "/blog/category/ocaml")
    ; ("/fr/category/a-la-une/", "/blog/category/ocamlpro")
    ; ("/fr/category/opam/", "/blog/category/tooling")
    ; ("/fr/category/rust/", "/blog/category/rust")
    ; ("/fr/category/ocaml-fr/", "/blog/category/ocaml")
Dario Pinto's avatar
Dario Pinto committed
107
  ]
108 109
  (*TAGS*)
  @ []
110
  (* BLOG *)
111 112
  @ [ ( "/blog/", "/blog")
    ; ( "/fr/blog-fr/", "/blog")
113 114
    ; ( "/2011/05/06/ocaml-32bits-longval/"
      , "/blog/2011_05_06_ocaml_32bits_longval" )
115 116
    ; ( "/2011/06/03/ocaml-cheat-sheets/", "/blog/2011_06_03_ocaml_cheat_sheets")
    ; ( "/2011/06/23/ocaml-and-windows/", "/blog/2011_06_23_ocaml_and_windows")
117 118 119 120 121 122
    ; ( "/2011/08/10/packing-and-functors/"
      , "/blog/2011_08_10_packing_and_functors" )
    ; ( "/2012/08/08/profiling-ocaml-amd64-code-under-linux/"
      , "/blog/2012_08_08_profiling_ocaml_amd64_code_under_linux" )
    ; ( "/2012/08/20/ocamlpros-contributions-to-ocaml-4-00-0/"
      , "/blog/2012_08_20_ocamlpro_contributions_to_400" )
123 124
    ; ( "/2013/01/17/beta-release-of-opam/"
      , "/blog/2013_01_17_beta_release_of_opam" )
125 126 127 128
    ; ( "/2013/02/18/an-overview-of-our-current-activities/"
      , "/blog/2013_02_18_overview_of_current_activities" )
    ; ( "/2013/03/14/opam-1-0-0-released/"
      , "/blog/2013_03_15_opam_1.0.0_released" )
129 130
    ; ( "/2013/03/18/an-indentation-engine-for-ocaml/"
      , "/blog/2013_03_18_an_indentation_engine_for_ocaml" )
131 132 133 134 135 136 137 138 139 140
    ; ( "/2013/04/02/wxocaml-camlidl-and-class-modules/"
      , "/blog/2013_04_02_wxocaml_camlidl_and_class_modules" )
    ; ( "/2013/04/22/april-monthly-report/"
      , "/blog/2013_04_22_april_monthly_report" )
    ; ( "/2013/05/24/optimisations-you-shouldnt-do/"
      , "/blog/2013_05_24_optimisations_you_shouldnt_do" )
    ; ( "/2013/07/01/news-from-may-and-june/"
      , "/blog/2013_07_01_news_from_may_and_june" )
    ; ( "/2013/07/11/better-inlining-progress-report/"
      , "/blog/2013_07_11_better_inlining_progress_report" )
141
    ; ( "/2013/08/05/news-from-july/", "/blog/2013_08_05_news_from_july")
142 143
    ; ( "/2013/09/04/ocamlpro-highlights-august-2013/"
      , "/blog/2013_09_04_ocamlpro_highlights_august_2013" )
144 145 146 147
    ; ( "/2013/10/02/alt-ergo-ocamlpro-two-months-later/"
      , "/blog/2013_10_02_alt_ergo_ocamlpro_two_months_later" )
    ; ( "2013/11/01/ocamlpro-highlights-sept-oct-2013/\n"
      , "/blog/2013_11_01_ocamlpro_highlights_sept_oct_2013" )
148 149
    ; ( "/2013/12/02/ocamlpro-highlights-november-2013/"
      , "/blog/2013_12_02_ocamlpro_highlights_november_2013" )
150 151 152 153
    ; ( "/2014/02/05/ocamlpro-highlights-dec-2013-jan-2014/"
      , "/blog/2014_02_05_ocamlpro_highlights_dec_2013_jan_2014" )
    ; ( "/2014/03/05/ocamlpro-highlights-feb-2014/"
      , "/blog/2014_03_05_ocamlpro_highlights_feb_2014" )
154 155
    ; ( "/2014/04/01/the-generic-syntax-extension/"
      , "/blog/2014_04_01_the_generic_syntax_extension" )
Dario Pinto's avatar
Dario Pinto committed
156 157
    ; ( "/2015/01/29/private-release-of-alt-ergo-1-00/"
      , "/blog/2015_01_29_private_release_of_alt_ergo_1_00" )
158 159
    ; ( "/2015/03/04/cumulus-and-ocp-memprof-a-love-story/"
      , "/blog/2015_03_04_cumulus_and_ocp_memprof_a_love_story" )
160 161 162 163
    ; ( "/2015/04/13/yes-ocp-memprof-scanf/"
      , "/blog/2015_04_13_yes_ocp_memprof_scanf" )
    ; ( "/2015/05/07/opam-1-2-2-released/"
      , "/blog/2015_05_07_opam_1.2.2_released" )
164 165
    ; ( "/2014/05/20/ocamlpro-highlights-april-2014/"
      , "/blog/2014_05_20_ocamlpro_highlights_april_2014" )
166 167
    ; ( "/2014/07/15/try-alt-ergo-in-your-browser/"
      , "/blog/2014_07_15_try_alt_ergo_in_your_browser" )
168 169
    ; ( "/2014/07/16/ocamlpro-highlights-may-june-2014/"
      , "/blog/2014_07_16_ocamlpro_highlights_may_june_2014" )
170 171
    ; ( "/2015/05/18/reduced-memory-allocations-with-ocp-memprof/"
      , "/blog/2015_05_18_reduced_memory_allocations_with_ocp_memprof." )
172
    ; ( "/2016/04/01/asm-ocaml/", "/blog/2016_04_01_asm_ocaml")
Dario Pinto's avatar
Dario Pinto committed
173 174 175
    ; ( "/2016/11/21/release-of-alt-ergo-1-30-with-experimental-support-for-models-generation/"
      , "/blog/2016_11_21_release_of_alt_ergo_1_30_with_experimental_support_for_models_generation"
      )
176 177 178 179 180 181 182 183 184 185 186
    ; ( "/2017/02/09/opam-2-0-beta-is-out/"
      , "/blog/2017_02_09_opam_2.0_beta_is_out" )
    ; ( "/2017/03/16/new-opam-features-opam-build/"
      , "/blog/2017_03_16_new_opam_features_opam_build" )
    ; ("/2017/04/11/ezsudoku/", "/blog/2017_04_01_ezsudoku")
    ; ( "/2017/04/27/new-opam-features-local-switches/"
      , "/blog/2017_04_27_new_opam_features_local_switches" )
    ; ( "/2017/05/04/new-opam-features-opam-install-dir/"
      , "/blog/2017_05_04_new_opam_features_opam_install_dir" )
    ; ( "/2017/05/11/new-opam-features-more-expressive-dependencies/"
      , "/blog/2017_05_11_new_opam_features_more_expressive_dependencies" )
187 188
    ; ( "/2018/01/15/2017-at-ocamlpro/", "/blog/2018_01_15_2017_at_ocamlpro")
    ; ( "/2018/01/15/2017-at-ocamlpro-2/", "/blog/2018_01_15_2017_at_ocamlpro")
189 190 191
    ; ( "/2018/02/14/release-of-a-first-version-of-tzscan-io-a-tezos-block-explorer/"
      , "/blog/2018_02_14_release_of_a_first_version_of_tzscan_io_a_tezos_block_explorer"
      )
192 193 194
    ; ("/fr/2018/02/14/une-premiere-version-de-notre-explorateur-de-blocs-tzscan-io/"
      , "/blog/2018_02_14_release_of_a_first_version_of_tzscan_io_a_tezos_block_explorer"
      )
195 196 197
    ; ( "/2018/02/08/liquidity-smart-contract-deploy-live-demo-on-tezos-alphanet-jfla2018/"
      , "/blog/2018_02_08_liquidity_smart_contract_deploy_live_demo_on_tezos_alphanet_jfla2018"
      )
198 199 200
    ; ("/fr/2018/02/08/notre-demo-live-de-deploiement-dun-smart-contrat-multisignature-ecrit-en-liquidity-sur-lalphanet-de-tezos-jfla2018/"
      , "/blog/2018_02_08_liquidity_smart_contract_deploy_live_demo_on_tezos_alphanet_jfla2018"
      )
201 202 203
    ; ( "/2018/02/08/ocamlpros-liquidity-lang-demo-at-jfla2018-a-smart-contract-design-language/"
      , "/blog/2018_02_08_liquidity_smart_contract_deploy_live_demo_on_tezos_alphanet_jfla2018"
      )
Dario Pinto's avatar
Dario Pinto committed
204 205 206 207
    ; ( "/2018/03/14/new-updates-on-tzscan/"
      , "/blog/2018_03_14_new_updates_on_tzscan" )
    ; ( "/2018/03/14/release-of-alt-ergo-2-1-0/"
      , "/blog/2018_03_14_release_of_alt_ergo_2_1_0" )
208
    ; ("/2018/04/01/ocaml-jtrt/", "/blog/2018_04_01_ocaml_jtrt")
Dario Pinto's avatar
Dario Pinto committed
209 210 211
    ; ( "/2018/04/13/taskforce-on-the-tezos-protocol-and-tzscan-evolution/"
      , "/blog/2018_04_13_taskforce_on_the_tezos_protocol_and_tzscan_evolution"
      )
Dario Pinto's avatar
Dario Pinto committed
212 213
    ; ( "/2018/04/23/release-of-alt-ergo-2-2-0/"
      , "/blog/2018_04_23_release_of_alt_ergo_2_2_0" )
214 215
    ; ( "/2018/05/22/opam-2-0-0-release-candidate-2-is-out/"
      , "/blog/2018_05_22_opam_2.0.0_release_candidate_2_is_out" )
216 217
    ; ( "/2018/07/20/new-updates-on-tzscan-2/"
      , "/blog/2018_07_20_new_updates_on_tzscan_2" )
Dario Pinto's avatar
Dario Pinto committed
218 219
    ; ( "/2018/07/20/ocamlpros-tezos-block-explorer-tzscans-last-updates/"
      , "/blog/2018_07_20_new_updates_on_tzscan_2" )
220 221
    ; ( "/fr/2018/07/20/ocamlpro-met-a-jour-son-block-explorer-tzscan-pour-tezos/"
      , "/blog/2018_07_20_new_updates_on_tzscan_2" )
222 223 224 225
    ; ( "/2018/07/26/opam-2-0-0-rc4-final-is-out/"
      , "/blog/2018_07_26_opam_2.0.0_rc4_final_is_out" )
    ; ( "/2018/09/19/opam-2-0-0-release-and-repository-upgrade/"
      , "/blog/2018_09_19_opam_2.0.0_release_and_repository_upgrade" )
Dario Pinto's avatar
Dario Pinto committed
226 227 228
    ; ( "/2018/10/17/ocamlpros-tzscan-grant-proposal-accepted-by-the-tezos-foundation-joint-press-release/"
      , "/blog/2018_10_17_ocamlpros_tzscan_grant_proposal_accepted_by_the_tezos_foundation_joint_press_release"
      )
229 230
    ; ("/fr/2018/11/01/communique-conjoint-la-fondation-tezos-octroie-une-bourse-tzscan-a-ocamlpro/"
      , "/blog/2018_10_17_ocamlpros_tzscan_grant_proposal_accepted_by_the_tezos_foundation_joint_press_release")
231 232 233
    ; ( "/2018/11/06/liquidity-tutorial-a-game-with-an-oracle-for-random-numbers/"
      , "/blog/2018_11_06_liquidity_tutorial_a_game_with_an_oracle_for_random_numbers"
      )
234 235
    ; ( "/fr/2018/11/06/tutoriel-liquidity-creer-un-jeu-de-hasard-avec-un-oracle-generant-des-nombres-aleatoires/"
      , "/blog/2018_11_06_liquidity_tutorial_a_game_with_an_oracle_for_random_numbers")
236 237 238 239
    ; ( "/2018/11/08/first-open-source-release-of-tzscan/"
      , "/blog/2018_11_08_first_open_source_release_of_tzscan" )
    ; ( "/2018/11/15/an-introduction-to-tezos-rpcs-a-basic-wallet/"
      , "/blog/2018_11_15_an-introduction_to_tezos_rpcs_a_basic_wallet" )
240 241
    ; ("/fr/2018/11/20/introduction-aux-rpcs-dans-tezos-exemple-dun-portefeuille-wallet-simple/"
      , "/blog/2018_11_20_fr_introduction_aux_rpcs_dans_tezos_exemple_dun_portefeuille_wallet_simple")
242 243
    ; ( "/2018/11/21/an-introduction-to-tezos-rpcs-signing-operations/"
      , "/blog/2018_11_21_an_introduction_to_tezos_rpcs_signing_operations" )
244
    ; ( "/2018/12/14/opam-2-0-2-release/", "/blog/2018_12_12_opam_2.0.2_release")
245 246
    ; ( "/2019/01/15/improving-tezos-storage/"
      , "/blog/2019_01_15_improving_tezos_storage" )
247 248 249
    ; ( "/fr/2019/01/21/performances-de-tezos-ameliorations/"
      , "/blog/2019_01_15_improving_tezos_storage")
    ; ( "/2019/01/29/tezos-and-ocamlpro/", "/blog/2019_01_29_tezos_and_ocamlpro")
250 251
    ; ( "/2019/01/30/improving-tezos-storage-update-and-beta-testing/"
      , "/blog/2019_01_30_improving_tezos_storage_update_and_beta_testing" )
252
    ; ( "/fr/2019/01/31/tezos-et-ocamlpro/", "2019_01_31_fr_tezos_et_ocamlpro")
253 254
    ; ( "/2019/02/04/improving-tezos-storage-gitlab-branch-for-testers/"
      , "/blog/2019_02_04_improving_tezos_storage_gitlab_branch_for_testers" )
255 256
    ; ( "/fr/2019/02/04/optimisation-du-stockage-dans-tezos-une-branche-de-test-sur-gitlab/"
      , "/blog/2019_02_04_fr_optimisation_du_stockage_dans_tezos_une_branche_de_test_sur_gitlab")
257 258 259 260
    ; ( "/2019/02/11/whats-new-for-alt-ergo-in-2018-here-is-a-recap/"
      , "/blog/2019_02_11_whats_new_for_alt_ergo_in_2018_here_is_a_recap" )
    ; ( "/2019/03/05/techelson-a-test-execution-engine-for-michelson/"
      , "/blog/2019_03_05_techelson_a_test_execution_engine_for_michelson" )
261 262
    ; ( "/fr/2019/03/05/avenement-de-techelson-moteur-de-tests-pour-michelson-liquidity/"
      , "/blog/2019_03_05_fr_release_de_techelson_moteur_de_tests_pour_michelson_et_liquidity")
Dario Pinto's avatar
Dario Pinto committed
263 264
    ; ( "/2019/03/05/signing-data-for-smart-contracts/"
      , "/blog/2019_03_05_signing_data_for_smart_contracts" )
Dario Pinto's avatar
Dario Pinto committed
265 266
    ; ( "/2019/03/08/announcing-liquidity-version-1-0/"
      , "/blog/2019_03_08_announcing_liquidity_version_1_0" )
Dario Pinto's avatar
same  
Dario Pinto committed
267 268
    ; ( "/2019/03/09/release-liquidity-v1-smart-contracts-language/"
      , "/blog/2019_03_09_release_liquidity_v1_smart_contracts_language" )
269
    ; ( "/2019/04/10/opam-2-0-4-release/", "/blog/2019_04_10_opam_2.0.4_release")
270 271 272 273
    ; ( "/2019/04/29/blockchains-at-ocamlpro-an-overview/"
      , "/blog/2019_04_29_blockchains_at_ocamlpro_an_overview" )
    ; ( "/2019/07/09/alt-ergo-participation-to-the-smt-comp-2019/"
      , "/blog/2019_07_09_alt_ergo_participation_to_the_smt_comp_2019" )
274 275
    ; ( "/fr/2019/07/10/resultats-de-la-smt-comp-2019-pour-alt-ergo/"
      , "/blog/2019_07_10_fr_résultats_de_la_smt_comp_2019_pour_alt_ergo")
276
    ; ("/2019/07/11/opam-2-0-5-release/", "/blog/2019_07_11_opam_2.0.5_release")
Dario Pinto's avatar
Dario Pinto committed
277 278
    ; ( "/2019/08/30/ocamlpros-compiler-team-work-update/"
      , "/blog/2019_08_30_ocamlpros_compiler_team_work_update" )
279 280 281 282
    ; ( "/2019/09/13/updated-cheat-sheets-ocaml-language-and-ocaml-standard-library/"
      , "/blog/2019_09_13_updated_cheat_sheets_language_stdlib_2" )
    ; ( "/2019/09/20/a-look-back-on-ocaml/"
      , "/blog/2019_09_20_look_back_ocaml_since_2011" )
Dario Pinto's avatar
Dario Pinto committed
283 284 285
    ; ( "/2019/09/25/ocaml-expert-and-beginner-training-by-ocamlpro-in-french-nov-5-6-7-8/"
      , "/blog/2019_09_25_ocaml_expert_and_beginner_training_by_ocamlpro_in_french_nov_5_6_7_8"
      )
286 287
    ; ( "/2020/01/10/opam-2-0-cheatsheet/"
      , "/blog/2020_01_10_opam_2.0_cheat_sheet" )
288 289
    ; ( "/2020/01/16/opam-2-0-6-release/", "/blog/2020_01_16_opam_2.0.6_release")
    ; ( "/2020/02/04/2019-at-ocamlpro/", "/blog/2020_02_04_2019_at_ocamlpro")
290 291 292
    ; ( "/2020/03/03/alt-ergo-userss-club-annual-meeting/"
      , "/blog/2020_03_03_reunion_annuelle_du_club_des_utilisateurs_dalt_ergo"
      )
293 294
    ; ( "/2020/03/16/new-version-of-try-ocaml-in-beta/"
      , "/blog/2020_03_16_new_version_of_try_ocaml_in_beta" )
295 296 297 298 299 300 301
    ; ( "/2020/03/23/ocaml-new-best-fit-garbage-collector/"
      , "/blog/2020_03_23_in_depth_look_at_best_fit_gc" )
    ; ("/2020/04/21/opam-2-0-7-release/", "/blog/2020_04_21_opam_2.0.7_release")
    ; ( "/2020/04/21/opam-2-1-0-alpha-is-here/"
      , "/blog/2020_04_21_opam_2.1.0_alpha_is_here" )
    ; ( "/2020/05/19/ocaml-solidity-parser-with-menhir/"
      , "/blog/2020_05_19_ocaml_solidity_parser_with_menhir" )
302
    ; ( "/fr/2020/06/01/tutoriel-format/", "/blog/2020_06_01_tutoriel_format")
303 304
    ; ( "/2020/06/05/interview-sylvain-conchon-joins-ocamlpro/"
      , "/blog/2020_06_05_interview_sylvain_conchon_joins_ocamlpro" )
305 306
    ; ( "/fr/2020/06/05/interview-sylvain-conchon-rejoint-ocamlpro/"
      , "/blog/2020_06_05_fr_interview_sylvain_conchon_rejoint_ocamlpro" )
307 308 309 310 311 312 313 314
    ; ( "/2020/06/09/a-dune-love-story-from-liquidity-to-love/"
      , "/blog/2020_06_09_a_dune_love_story_from_liquidity_to_love" )
    ; ( "/2020/09/24/rehabilitating-packs-using-functors-and-recursivity-part-1/"
      , "/blog/2020_09_24_rehabilitating_packs_using_functors_and_recursivity_part_1"
      )
    ; ( "/2020/09/30/rehabilitating-packs-using-functors-and-recursivity-part-2/"
      , "/blog/2020_09_30_rehabilitating_packs_using_functors_and_recursivity_part_2"
      )
315 316
    ; ( "/2020/12/01/memthol-exploring-program-profiling/"
      , "/blog/2020_12_01_memthol_exploring_program_profiling" )
Dario Pinto's avatar
Dario Pinto committed
317 318
    ; ( "/2021/01/22/release-of-alt-ergo-2-4-0/"
      , "/blog/2021_01_22_release_of_alt_ergo_2_4_0" )
319 320 321
    ; ( "/2021/02/02/2020-at-ocamlpro/", "/blog/2021_02_02_2020_at_ocamlpro")
    ; ( "/2021/02/09/opam-2-0-8-release/", "/blog/2021_02_08_opam_2.0.8_release")
    ; ( "/2021/03/29/new-try-alt-ergo/", "/blog/2021_03_29_new_try_alt_ergo")
322 323 324 325
    ; ( "/2021/04/29/alt-ergo-users-club-annual-meeting-2021/"
      , "/blog/2021_04_29_reunion_annuelle_du_club_des_utilisateurs_dalt_ergo_2021"
      )
    ; ( "/2021/05/06/tutorial-format-module-of-ocaml/"
326
      , "/blog/2021_05_06_tutorial_format_module_of_ocaml" )
327 328
    ; ( "/2021/07/16/detecting-identity-functions-in-flambda/"
      , "/blog/2021_07_16_detecting_identity_functions_in_flambda" )
329 330
    ; ( "/fr/2021/07/15/detection-de-fonctions-didentite-dans-flambda/"
      , "/blog/2021_07_15_fr_detection_de_fonctions_didentite_dans_flambda." )
331 332 333 334 335 336
    ; ("/2021/08/05/opam-2-0-9-release/", "/blog/2021_08_03_opam_2.0.9_release")
    ; ( "/2021/08/05/opam-2-1-0-is-released/"
      , "/blog/2021_08_04_opam_2.1.0_is_released" )
    ; ( "/2021/09/02/generating-static-and-portable-executables-with-ocaml/"
      , "/blog/2021_09_02_generating_static_and_portable_executables_with_ocaml"
      )
337 338
    ; ("/2021/10/14/verification-for-dummies-smt-and-induction/"
      , "/blog/2021_10_14_verification_for_dummies_smt_and_induction")
339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357
    ]
  @
    (* FILES *)
    (* WP-CONTENT *)
    [
      ( "/wp-content/uploads/2019/11/ocaml-opam.pdf"
      , "https://ocamlpro.github.io/ocaml-cheat-sheets/ocaml-opam.pdf" )
    ; ( "/wp-content/uploads/2020/01/ocaml-opam-bw.pdf"
      , "https://ocamlpro.github.io/ocaml-cheat-sheets/ocaml-opam-bw.pdf" )
    ]
  @ (* PUB *)
    [
     ( "/pub/opam_installer.sh"
      , "https://github.com/ocaml/opam/blob/master/shell/opam_installer.sh" )
    ; ( "/pub/liquidity_slides.en_.pdf"
      , "https://files.ocamlpro.com/pub/liquidity_slides.en_.pdf" )
    ]
  @ (* FILES *)
    [
Dario Pinto's avatar
Dario Pinto committed
358
      ("https:/files.ocamlpro.com/files/tuareg-mode.pdf", "/")
359
    ; ("/files/try-alt-ergo.why", "/")
360
    ]
361 362 363 364 365 366 367 368 369 370 371

let redirection_hash =
  let tbl = Hashtbl.create 512 in
  List.iter (fun (oldu, newu) ->
    let collision =
      Hashtbl.find_opt tbl oldu in
    match collision with
    | None -> Hashtbl.add tbl oldu newu
    | Some _new_url -> Blog.error (Format.sprintf "%s has a duplicate redirection." oldu)
  ) old_to_new;
  tbl