浏览代码

Update redirects

Max Hilbrunner 2 年之前
父节点
当前提交
d44c1bd7dc
共有 3 个文件被更改,包括 39 次插入17 次删除
  1. 1 0
      _tools/redirects/convert_git_renames_to_csv.py
  2. 28 9
      _tools/redirects/create_redirects.py
  3. 10 8
      _tools/redirects/redirects.csv

+ 1 - 0
_tools/redirects/convert_git_renames_to_csv.py

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

+ 28 - 9
_tools/redirects/create_redirects.py

@@ -13,11 +13,13 @@ How to use:
 - Run this script
 - Run this script
 
 
 Example:
 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
   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.
 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.
 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
 DEFAULT_PAGINATED_SIZE = 1024
 API_SLEEP_TIME = 0.2 # Seconds.
 API_SLEEP_TIME = 0.2 # Seconds.
 REDIRECT_SUFFIXES = [".html", "/"]
 REDIRECT_SUFFIXES = [".html", "/"]
+BUILD_PATH = "../../_build/html"
 TIMEOUT_SECONDS = 5
 TIMEOUT_SECONDS = 5
 HTTP = None
 HTTP = None
 
 
@@ -72,18 +75,34 @@ def parse_command_line_args():
         action="store_true",
         action="store_true",
         help="Enables verbose output.",
         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()
     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):
 def make_redirect(source, destination, args, retry=0):
+    if args.validate:
+        validate(destination)
+
     json_data = {"from_url": source, "to_url": destination, "type": "page"}
     json_data = {"from_url": source, "to_url": destination, "type": "page"}
     headers = REQUEST_HEADERS
     headers = REQUEST_HEADERS
 
 
     if args.verbose:
     if args.verbose:
         print("POST " + REDIRECT_URL, headers, json_data)
         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
         return
 
 
     response = HTTP.post(
     response = HTTP.post(
@@ -222,7 +241,7 @@ def redirect_to_str(item):
 def main():
 def main():
     args = parse_command_line_args()
     args = parse_command_line_args()
 
 
-    if not args.dry_run:
+    if not is_dry_run(args):
         load_auth()
         load_auth()
 
 
         retry_strategy = Retry(
         retry_strategy = Retry(
@@ -252,12 +271,12 @@ def main():
     print("Loaded", len(redirects_file), "redirects from", args.file + ".")
     print("Loaded", len(redirects_file), "redirects from", args.file + ".")
 
 
     existing = []
     existing = []
-    if not args.dry_run:
+    if not is_dry_run(args):
         existing = get_existing_redirects(args.delete)
         existing = get_existing_redirects(args.delete)
     print("Loaded", len(existing), "existing redirects from RTD.")
     print("Loaded", len(existing), "existing redirects from RTD.")
 
 
     print("Total redirects:", str(len(to_add)) +
     print("Total redirects:", str(len(to_add)) +
-          " (+" + str(len(existing)), "existing.)")
+          " new + " + str(len(existing)), "existing =", to_add+existing, "total")
 
 
     redirects = []
     redirects = []
     added = {}
     added = {}
@@ -312,12 +331,12 @@ def main():
             if not id(redirect[0], redirect[1]) in existing_ids:
             if not id(redirect[0], redirect[1]) in existing_ids:
                 make_redirect(redirect[0], redirect[1], args)
                 make_redirect(redirect[0], redirect[1], args)
 
 
-            if not args.dry_run:
+            if not is_dry_run(args):
                 sleep()
                 sleep()
 
 
     print("Finished creating", len(redirects), "redirects.")
     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!")
         print("THIS WAS A DRY RUN, NOTHING WAS SUBMITTED TO READTHEDOCS!")
 
 
 
 

+ 10 - 8
_tools/redirects/redirects.csv

@@ -36,6 +36,7 @@ source,destination
 /development/compiling/compiling_for_uwp.html,/contributing/development/compiling/compiling_for_uwp.html
 /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_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_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_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/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
 /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/shading_language.html,/learning/features/shading/shading_language.html
 /reference/unity_to_godot.html,/learning/editor/unity_to_godot.html
 /reference/unity_to_godot.html,/learning/editor/unity_to_godot.html
 /reference/variant_class.html,/development/cpp/variant_class.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/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/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/reflection_probes.html,/tutorials/3d/global_illumination/reflection_probes.html
 /tutorials/3d/sdfgi.html,/tutorials/3d/global_illumination/using_sdfgi.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_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/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
 /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/optimizing_3d_performance.html,/tutorials/performance/optimizing_3d_performance.html
 /tutorials/optimization/using_multimesh.html,/tutorials/performance/using_multimesh.html
 /tutorials/optimization/using_multimesh.html,/tutorials/performance/using_multimesh.html
 /tutorials/optimization/using_servers.html,/tutorials/performance/using_servers.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/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/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/html5_shell_classref.html,/tutorials/platform/web/html5_shell_classref.html
 /tutorials/platform/platform_html5.html,/tutorials/platform/web/index.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/android_plugin.html,/tutorials/platform/android/android_plugin.html
 /tutorials/plugins/android/index.html,/tutorials/platform/android/index.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-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/gdnative-cpp-example.html,/tutorials/scripting/gdnative/gdnative_cpp_example.html
 /tutorials/plugins/gdnative/index.html,/tutorials/scripting/gdnative/index.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/advanced_postprocessing.html,/tutorials/shaders/advanced_postprocessing.html
 /tutorials/shading/godot_shader_language_style_guide.html,/tutorials/shaders/shaders_style_guide.html
 /tutorials/shading/godot_shader_language_style_guide.html,/tutorials/shaders/shaders_style_guide.html
 /tutorials/shading/index.html,/tutorials/shaders/index.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/multiple_resolutions.html,/tutorials/rendering/multiple_resolutions.html
 /tutorials/viewports/using_viewport_as_texture.html,/tutorials/shaders/using_viewport_as_texture.html
 /tutorials/viewports/using_viewport_as_texture.html,/tutorials/shaders/using_viewport_as_texture.html
 /tutorials/viewports/viewports.html,/tutorials/rendering/viewports.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