Update redirects

This commit is contained in:
Max Hilbrunner
2023-02-28 18:35:16 +01:00
parent e4aa65a789
commit d44c1bd7dc
3 changed files with 39 additions and 17 deletions

View File

@@ -69,6 +69,7 @@ def main():
[
"git",
"diff",
"--find-renames",
"--name-status",
"--diff-filter=R",
args.revision1,

View File

@@ -13,11 +13,13 @@ How to use:
- Run this script
Example:
python convert_git_renames_to_csv.py stable 3.4 >> redirects.csv
python convert_git_renames_to_csv.py stable latest >> redirects.csv
python create_redirects.py
This would add all files that were renamed in 3.4 from stable to redirects.csv,
This would add all files that were renamed in latest from stable to redirects.csv,
and then create the redirects on RTD accordingly.
Make sure to use the old branch first, then the more recent branch (i.e., stable > master).
You need to have both branches or revisions available and up to date locally.
Care is taken to not add redirects that already exist on RTD.
"""
@@ -38,6 +40,7 @@ USER_AGENT = "Godot RTD Redirects on Mozilla/5.0 (Windows NT 10.0; Win64; x64) A
DEFAULT_PAGINATED_SIZE = 1024
API_SLEEP_TIME = 0.2 # Seconds.
REDIRECT_SUFFIXES = [".html", "/"]
BUILD_PATH = "../../_build/html"
TIMEOUT_SECONDS = 5
HTTP = None
@@ -72,18 +75,34 @@ def parse_command_line_args():
action="store_true",
help="Enables verbose output.",
)
parser.add_argument(
"--validate",
action="store_true",
help="Validates each redirect by checking the target page exists. Implies --dry-run.",
)
return parser.parse_args()
def is_dry_run(args):
return args.dry_run or args.validate
def validate(destination):
p = BUILD_PATH + destination
if not os.path.exists(p):
print("Invalid destination: " + destination + " (" + p + ")")
def make_redirect(source, destination, args, retry=0):
if args.validate:
validate(destination)
json_data = {"from_url": source, "to_url": destination, "type": "page"}
headers = REQUEST_HEADERS
if args.verbose:
print("POST " + REDIRECT_URL, headers, json_data)
if args.dry_run:
print(f"Created redirect {source} -> {destination} (DRY RUN)")
if is_dry_run(args):
if not args.validate:
print(f"Created redirect {source} -> {destination} (DRY RUN)")
return
response = HTTP.post(
@@ -222,7 +241,7 @@ def redirect_to_str(item):
def main():
args = parse_command_line_args()
if not args.dry_run:
if not is_dry_run(args):
load_auth()
retry_strategy = Retry(
@@ -252,12 +271,12 @@ def main():
print("Loaded", len(redirects_file), "redirects from", args.file + ".")
existing = []
if not args.dry_run:
if not is_dry_run(args):
existing = get_existing_redirects(args.delete)
print("Loaded", len(existing), "existing redirects from RTD.")
print("Total redirects:", str(len(to_add)) +
" (+" + str(len(existing)), "existing.)")
" new + " + str(len(existing)), "existing =", to_add+existing, "total")
redirects = []
added = {}
@@ -312,12 +331,12 @@ def main():
if not id(redirect[0], redirect[1]) in existing_ids:
make_redirect(redirect[0], redirect[1], args)
if not args.dry_run:
if not is_dry_run(args):
sleep()
print("Finished creating", len(redirects), "redirects.")
if args.dry_run:
if is_dry_run(args):
print("THIS WAS A DRY RUN, NOTHING WAS SUBMITTED TO READTHEDOCS!")

View File

@@ -36,6 +36,7 @@ source,destination
/development/compiling/compiling_for_uwp.html,/contributing/development/compiling/compiling_for_uwp.html
/development/compiling/compiling_for_web.html,/contributing/development/compiling/compiling_for_web.html
/development/compiling/compiling_for_windows.html,/contributing/development/compiling/compiling_for_windows.html
/development/compiling/compiling_for_x11.html,/contributing/development/compiling/compiling_for_linuxbsd.html
/development/compiling/compiling_with_mono.html,/contributing/development/compiling/compiling_with_mono.html
/development/compiling/compiling_with_script_encryption_key.html,/contributing/development/compiling/compiling_with_script_encryption_key.html
/development/compiling/cross-compiling_for_ios_on_linux.html,/contributing/development/compiling/cross-compiling_for_ios_on_linux.html
@@ -324,11 +325,13 @@ source,destination
/reference/shading_language.html,/learning/features/shading/shading_language.html
/reference/unity_to_godot.html,/learning/editor/unity_to_godot.html
/reference/variant_class.html,/development/cpp/variant_class.html
/tutorials/3d/introduction_to_global_illumination.html,/tutorials/3d/global_illumination/introduction_to_global_illumination.html
/tutorials/3d/faking_global_illumination.html,/tutorials/3d/global_illumination/faking_global_illumination.html
/tutorials/3d/introduction_to_global_illumination.html,/tutorials/3d/global_illumination/introduction_to_global_illumination.html
/tutorials/3d/inverse_kinematics.html,/community/tutorials/3d/inverse_kinematics.html
/tutorials/3d/procedural_geometry/immediategeometry.html,/tutorials/3d/procedural_geometry/immediatemesh.html
/tutorials/3d/reflection_probes.html,/tutorials/3d/global_illumination/reflection_probes.html
/tutorials/3d/sdfgi.html,/tutorials/3d/global_illumination/using_sdfgi.html
/tutorials/3d/spatial_material.html,/tutorials/3d/standard_material_3d.html
/tutorials/3d/using_lightmap_gi.html,/tutorials/3d/global_illumination/using_lightmap_gi.html
/tutorials/3d/using_voxel_gi.html,/tutorials/3d/global_illumination/using_voxel_gi.html
/tutorials/3d/vertex_animation/animating_thousands_of_fish.html,/tutorials/performance/vertex_animation/animating_thousands_of_fish.html
@@ -380,15 +383,21 @@ source,destination
/tutorials/optimization/optimizing_3d_performance.html,/tutorials/performance/optimizing_3d_performance.html
/tutorials/optimization/using_multimesh.html,/tutorials/performance/using_multimesh.html
/tutorials/optimization/using_servers.html,/tutorials/performance/using_servers.html
/tutorials/physics/using_kinematic_body_2d.html,/tutorials/physics/using_character_body_2d.html
/tutorials/platform/android_in_app_purchases.html,/tutorials/platform/android/android_in_app_purchases.html
/tutorials/platform/customizing_html5_shell.html,/tutorials/platform/web/customizing_html5_shell.html
/tutorials/platform/html5_shell_classref.html,/tutorials/platform/web/html5_shell_classref.html
/tutorials/platform/platform_html5.html,/tutorials/platform/web/index.html
/tutorials/plugins/android/android_plugin.html,/tutorials/platform/android/android_plugin.html
/tutorials/plugins/android/index.html,/tutorials/platform/android/index.html
/tutorials/plugins/editor/spatial_gizmos.html,/tutorials/plugins/editor/3d_gizmos.html
/tutorials/plugins/gdnative/gdnative-c-example.html,/tutorials/scripting/gdnative/gdnative_c_example.html
/tutorials/plugins/gdnative/gdnative-cpp-example.html,/tutorials/scripting/gdnative/gdnative_cpp_example.html
/tutorials/plugins/gdnative/index.html,/tutorials/scripting/gdnative/index.html
/tutorials/scripting/gdnative/gdnative_c_example.html,/tutorials/plugins/gdextension/gdextension_cpp_example.html
/tutorials/scripting/gdnative/gdnative_cpp_example.html,/tutorials/plugins/gdextension/gdextension_cpp_example.html
/tutorials/scripting/gdnative/index.html,/tutorials/scripting/gdextension/index.html
/tutorials/scripting/gdnative/what_is_gdnative.html,/tutorials/scripting/gdnative/what_is_gdextension.html
/tutorials/shading/advanced_postprocessing.html,/tutorials/shaders/advanced_postprocessing.html
/tutorials/shading/godot_shader_language_style_guide.html,/tutorials/shaders/shaders_style_guide.html
/tutorials/shading/index.html,/tutorials/shaders/index.html
@@ -409,10 +418,3 @@ source,destination
/tutorials/viewports/multiple_resolutions.html,/tutorials/rendering/multiple_resolutions.html
/tutorials/viewports/using_viewport_as_texture.html,/tutorials/shaders/using_viewport_as_texture.html
/tutorials/viewports/viewports.html,/tutorials/rendering/viewports.html
/tutorials/physics/using_kinematic_body_2d.html,/tutorials/physics/using_character_body_2d.html
/tutorials/plugins/editor/spatial_gizmos.html,/tutorials/plugins/editor/3d_gizmos.html
/tutorials/3d/procedural_geometry/immediategeometry.html,/tutorials/3d/procedural_geometry/immediatemesh.html
/tutorials/scripting/gdnative/index.html,/tutorials/scripting/gdextension/index.html
/tutorials/scripting/gdnative/what_is_gdnative.html,/tutorials/scripting/gdnative/what_is_gdextension.html
/tutorials/scripting/gdnative/gdnative_c_example.html,/tutorials/plugins/gdextension/gdextension_cpp_example.html
/tutorials/scripting/gdnative/gdnative_cpp_example.html,/tutorials/plugins/gdextension/gdextension_cpp_example.html
1 source destination
36 /development/compiling/compiling_for_uwp.html /contributing/development/compiling/compiling_for_uwp.html
37 /development/compiling/compiling_for_web.html /contributing/development/compiling/compiling_for_web.html
38 /development/compiling/compiling_for_windows.html /contributing/development/compiling/compiling_for_windows.html
39 /development/compiling/compiling_for_x11.html /contributing/development/compiling/compiling_for_linuxbsd.html
40 /development/compiling/compiling_with_mono.html /contributing/development/compiling/compiling_with_mono.html
41 /development/compiling/compiling_with_script_encryption_key.html /contributing/development/compiling/compiling_with_script_encryption_key.html
42 /development/compiling/cross-compiling_for_ios_on_linux.html /contributing/development/compiling/cross-compiling_for_ios_on_linux.html
325 /reference/shading_language.html /learning/features/shading/shading_language.html
326 /reference/unity_to_godot.html /learning/editor/unity_to_godot.html
327 /reference/variant_class.html /development/cpp/variant_class.html
/tutorials/3d/introduction_to_global_illumination.html /tutorials/3d/global_illumination/introduction_to_global_illumination.html
328 /tutorials/3d/faking_global_illumination.html /tutorials/3d/global_illumination/faking_global_illumination.html
329 /tutorials/3d/introduction_to_global_illumination.html /tutorials/3d/global_illumination/introduction_to_global_illumination.html
330 /tutorials/3d/inverse_kinematics.html /community/tutorials/3d/inverse_kinematics.html
331 /tutorials/3d/procedural_geometry/immediategeometry.html /tutorials/3d/procedural_geometry/immediatemesh.html
332 /tutorials/3d/reflection_probes.html /tutorials/3d/global_illumination/reflection_probes.html
333 /tutorials/3d/sdfgi.html /tutorials/3d/global_illumination/using_sdfgi.html
334 /tutorials/3d/spatial_material.html /tutorials/3d/standard_material_3d.html
335 /tutorials/3d/using_lightmap_gi.html /tutorials/3d/global_illumination/using_lightmap_gi.html
336 /tutorials/3d/using_voxel_gi.html /tutorials/3d/global_illumination/using_voxel_gi.html
337 /tutorials/3d/vertex_animation/animating_thousands_of_fish.html /tutorials/performance/vertex_animation/animating_thousands_of_fish.html
383 /tutorials/optimization/optimizing_3d_performance.html /tutorials/performance/optimizing_3d_performance.html
384 /tutorials/optimization/using_multimesh.html /tutorials/performance/using_multimesh.html
385 /tutorials/optimization/using_servers.html /tutorials/performance/using_servers.html
386 /tutorials/physics/using_kinematic_body_2d.html /tutorials/physics/using_character_body_2d.html
387 /tutorials/platform/android_in_app_purchases.html /tutorials/platform/android/android_in_app_purchases.html
388 /tutorials/platform/customizing_html5_shell.html /tutorials/platform/web/customizing_html5_shell.html
389 /tutorials/platform/html5_shell_classref.html /tutorials/platform/web/html5_shell_classref.html
390 /tutorials/platform/platform_html5.html /tutorials/platform/web/index.html
391 /tutorials/plugins/android/android_plugin.html /tutorials/platform/android/android_plugin.html
392 /tutorials/plugins/android/index.html /tutorials/platform/android/index.html
393 /tutorials/plugins/editor/spatial_gizmos.html /tutorials/plugins/editor/3d_gizmos.html
394 /tutorials/plugins/gdnative/gdnative-c-example.html /tutorials/scripting/gdnative/gdnative_c_example.html
395 /tutorials/plugins/gdnative/gdnative-cpp-example.html /tutorials/scripting/gdnative/gdnative_cpp_example.html
396 /tutorials/plugins/gdnative/index.html /tutorials/scripting/gdnative/index.html
397 /tutorials/scripting/gdnative/gdnative_c_example.html /tutorials/plugins/gdextension/gdextension_cpp_example.html
398 /tutorials/scripting/gdnative/gdnative_cpp_example.html /tutorials/plugins/gdextension/gdextension_cpp_example.html
399 /tutorials/scripting/gdnative/index.html /tutorials/scripting/gdextension/index.html
400 /tutorials/scripting/gdnative/what_is_gdnative.html /tutorials/scripting/gdnative/what_is_gdextension.html
401 /tutorials/shading/advanced_postprocessing.html /tutorials/shaders/advanced_postprocessing.html
402 /tutorials/shading/godot_shader_language_style_guide.html /tutorials/shaders/shaders_style_guide.html
403 /tutorials/shading/index.html /tutorials/shaders/index.html
418 /tutorials/viewports/multiple_resolutions.html /tutorials/rendering/multiple_resolutions.html
419 /tutorials/viewports/using_viewport_as_texture.html /tutorials/shaders/using_viewport_as_texture.html
420 /tutorials/viewports/viewports.html /tutorials/rendering/viewports.html
/tutorials/physics/using_kinematic_body_2d.html /tutorials/physics/using_character_body_2d.html
/tutorials/plugins/editor/spatial_gizmos.html /tutorials/plugins/editor/3d_gizmos.html
/tutorials/3d/procedural_geometry/immediategeometry.html /tutorials/3d/procedural_geometry/immediatemesh.html
/tutorials/scripting/gdnative/index.html /tutorials/scripting/gdextension/index.html
/tutorials/scripting/gdnative/what_is_gdnative.html /tutorials/scripting/gdnative/what_is_gdextension.html
/tutorials/scripting/gdnative/gdnative_c_example.html /tutorials/plugins/gdextension/gdextension_cpp_example.html
/tutorials/scripting/gdnative/gdnative_cpp_example.html /tutorials/plugins/gdextension/gdextension_cpp_example.html