website/scripts: Add docsmg migration tool (#10658)
* add docsmg tool * moved to the correct scripts directory * removed test files
This commit is contained in:
		
							
								
								
									
										1
									
								
								website/scripts/docsmg/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								website/scripts/docsmg/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | |||||||
|  | /target | ||||||
							
								
								
									
										468
									
								
								website/scripts/docsmg/Cargo.lock
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										468
									
								
								website/scripts/docsmg/Cargo.lock
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @ -0,0 +1,468 @@ | |||||||
|  | # This file is automatically @generated by Cargo. | ||||||
|  | # It is not intended for manual editing. | ||||||
|  | version = 3 | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "addr2line" | ||||||
|  | version = "0.22.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" | ||||||
|  | dependencies = [ | ||||||
|  |  "gimli", | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "adler" | ||||||
|  | version = "1.0.2" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "aho-corasick" | ||||||
|  | version = "1.1.3" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" | ||||||
|  | dependencies = [ | ||||||
|  |  "memchr", | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "anstream" | ||||||
|  | version = "0.6.14" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" | ||||||
|  | dependencies = [ | ||||||
|  |  "anstyle", | ||||||
|  |  "anstyle-parse", | ||||||
|  |  "anstyle-query", | ||||||
|  |  "anstyle-wincon", | ||||||
|  |  "colorchoice", | ||||||
|  |  "is_terminal_polyfill", | ||||||
|  |  "utf8parse", | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "anstyle" | ||||||
|  | version = "1.0.7" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "anstyle-parse" | ||||||
|  | version = "0.2.4" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" | ||||||
|  | dependencies = [ | ||||||
|  |  "utf8parse", | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "anstyle-query" | ||||||
|  | version = "1.1.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "ad186efb764318d35165f1758e7dcef3b10628e26d41a44bc5550652e6804391" | ||||||
|  | dependencies = [ | ||||||
|  |  "windows-sys 0.52.0", | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "anstyle-wincon" | ||||||
|  | version = "3.0.3" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" | ||||||
|  | dependencies = [ | ||||||
|  |  "anstyle", | ||||||
|  |  "windows-sys 0.52.0", | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "anyhow" | ||||||
|  | version = "1.0.86" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "backtrace" | ||||||
|  | version = "0.3.73" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" | ||||||
|  | dependencies = [ | ||||||
|  |  "addr2line", | ||||||
|  |  "cc", | ||||||
|  |  "cfg-if", | ||||||
|  |  "libc", | ||||||
|  |  "miniz_oxide", | ||||||
|  |  "object", | ||||||
|  |  "rustc-demangle", | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "cc" | ||||||
|  | version = "1.1.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "eaff6f8ce506b9773fa786672d63fc7a191ffea1be33f72bbd4aeacefca9ffc8" | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "cfg-if" | ||||||
|  | version = "1.0.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "clap" | ||||||
|  | version = "4.5.9" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "64acc1846d54c1fe936a78dc189c34e28d3f5afc348403f28ecf53660b9b8462" | ||||||
|  | dependencies = [ | ||||||
|  |  "clap_builder", | ||||||
|  |  "clap_derive", | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "clap_builder" | ||||||
|  | version = "4.5.9" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "6fb8393d67ba2e7bfaf28a23458e4e2b543cc73a99595511eb207fdb8aede942" | ||||||
|  | dependencies = [ | ||||||
|  |  "anstream", | ||||||
|  |  "anstyle", | ||||||
|  |  "clap_lex", | ||||||
|  |  "strsim", | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "clap_derive" | ||||||
|  | version = "4.5.8" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "2bac35c6dafb060fd4d275d9a4ffae97917c13a6327903a8be2153cd964f7085" | ||||||
|  | dependencies = [ | ||||||
|  |  "heck", | ||||||
|  |  "proc-macro2", | ||||||
|  |  "quote", | ||||||
|  |  "syn", | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "clap_lex" | ||||||
|  | version = "0.7.1" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "4b82cf0babdbd58558212896d1a4272303a57bdb245c2bf1147185fb45640e70" | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "colorchoice" | ||||||
|  | version = "1.0.1" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "colored" | ||||||
|  | version = "2.1.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "cbf2150cce219b664a8a70df7a1f933836724b503f8a413af9365b4dcc4d90b8" | ||||||
|  | dependencies = [ | ||||||
|  |  "lazy_static", | ||||||
|  |  "windows-sys 0.48.0", | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "docsmg" | ||||||
|  | version = "0.1.0" | ||||||
|  | dependencies = [ | ||||||
|  |  "anyhow", | ||||||
|  |  "clap", | ||||||
|  |  "colored", | ||||||
|  |  "lazy_static", | ||||||
|  |  "regex", | ||||||
|  |  "tokio", | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "gimli" | ||||||
|  | version = "0.29.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "heck" | ||||||
|  | version = "0.5.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "is_terminal_polyfill" | ||||||
|  | version = "1.70.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "lazy_static" | ||||||
|  | version = "1.5.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "libc" | ||||||
|  | version = "0.2.155" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "memchr" | ||||||
|  | version = "2.7.4" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "miniz_oxide" | ||||||
|  | version = "0.7.4" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" | ||||||
|  | dependencies = [ | ||||||
|  |  "adler", | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "object" | ||||||
|  | version = "0.36.1" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "081b846d1d56ddfc18fdf1a922e4f6e07a11768ea1b92dec44e42b72712ccfce" | ||||||
|  | dependencies = [ | ||||||
|  |  "memchr", | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "pin-project-lite" | ||||||
|  | version = "0.2.14" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "proc-macro2" | ||||||
|  | version = "1.0.86" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" | ||||||
|  | dependencies = [ | ||||||
|  |  "unicode-ident", | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "quote" | ||||||
|  | version = "1.0.36" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" | ||||||
|  | dependencies = [ | ||||||
|  |  "proc-macro2", | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "regex" | ||||||
|  | version = "1.10.5" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" | ||||||
|  | dependencies = [ | ||||||
|  |  "aho-corasick", | ||||||
|  |  "memchr", | ||||||
|  |  "regex-automata", | ||||||
|  |  "regex-syntax", | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "regex-automata" | ||||||
|  | version = "0.4.7" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" | ||||||
|  | dependencies = [ | ||||||
|  |  "aho-corasick", | ||||||
|  |  "memchr", | ||||||
|  |  "regex-syntax", | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "regex-syntax" | ||||||
|  | version = "0.8.4" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "rustc-demangle" | ||||||
|  | version = "0.1.24" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "strsim" | ||||||
|  | version = "0.11.1" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "syn" | ||||||
|  | version = "2.0.70" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "2f0209b68b3613b093e0ec905354eccaedcfe83b8cb37cbdeae64026c3064c16" | ||||||
|  | dependencies = [ | ||||||
|  |  "proc-macro2", | ||||||
|  |  "quote", | ||||||
|  |  "unicode-ident", | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "tokio" | ||||||
|  | version = "1.38.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "ba4f4a02a7a80d6f274636f0aa95c7e383b912d41fe721a31f29e29698585a4a" | ||||||
|  | dependencies = [ | ||||||
|  |  "backtrace", | ||||||
|  |  "pin-project-lite", | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "unicode-ident" | ||||||
|  | version = "1.0.12" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "utf8parse" | ||||||
|  | version = "0.2.2" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "windows-sys" | ||||||
|  | version = "0.48.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" | ||||||
|  | dependencies = [ | ||||||
|  |  "windows-targets 0.48.5", | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "windows-sys" | ||||||
|  | version = "0.52.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" | ||||||
|  | dependencies = [ | ||||||
|  |  "windows-targets 0.52.6", | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "windows-targets" | ||||||
|  | version = "0.48.5" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" | ||||||
|  | dependencies = [ | ||||||
|  |  "windows_aarch64_gnullvm 0.48.5", | ||||||
|  |  "windows_aarch64_msvc 0.48.5", | ||||||
|  |  "windows_i686_gnu 0.48.5", | ||||||
|  |  "windows_i686_msvc 0.48.5", | ||||||
|  |  "windows_x86_64_gnu 0.48.5", | ||||||
|  |  "windows_x86_64_gnullvm 0.48.5", | ||||||
|  |  "windows_x86_64_msvc 0.48.5", | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "windows-targets" | ||||||
|  | version = "0.52.6" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" | ||||||
|  | dependencies = [ | ||||||
|  |  "windows_aarch64_gnullvm 0.52.6", | ||||||
|  |  "windows_aarch64_msvc 0.52.6", | ||||||
|  |  "windows_i686_gnu 0.52.6", | ||||||
|  |  "windows_i686_gnullvm", | ||||||
|  |  "windows_i686_msvc 0.52.6", | ||||||
|  |  "windows_x86_64_gnu 0.52.6", | ||||||
|  |  "windows_x86_64_gnullvm 0.52.6", | ||||||
|  |  "windows_x86_64_msvc 0.52.6", | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "windows_aarch64_gnullvm" | ||||||
|  | version = "0.48.5" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "windows_aarch64_gnullvm" | ||||||
|  | version = "0.52.6" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "windows_aarch64_msvc" | ||||||
|  | version = "0.48.5" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "windows_aarch64_msvc" | ||||||
|  | version = "0.52.6" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "windows_i686_gnu" | ||||||
|  | version = "0.48.5" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "windows_i686_gnu" | ||||||
|  | version = "0.52.6" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "windows_i686_gnullvm" | ||||||
|  | version = "0.52.6" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "windows_i686_msvc" | ||||||
|  | version = "0.48.5" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "windows_i686_msvc" | ||||||
|  | version = "0.52.6" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "windows_x86_64_gnu" | ||||||
|  | version = "0.48.5" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "windows_x86_64_gnu" | ||||||
|  | version = "0.52.6" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "windows_x86_64_gnullvm" | ||||||
|  | version = "0.48.5" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "windows_x86_64_gnullvm" | ||||||
|  | version = "0.52.6" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "windows_x86_64_msvc" | ||||||
|  | version = "0.48.5" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "windows_x86_64_msvc" | ||||||
|  | version = "0.52.6" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" | ||||||
							
								
								
									
										14
									
								
								website/scripts/docsmg/Cargo.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								website/scripts/docsmg/Cargo.toml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,14 @@ | |||||||
|  | [package] | ||||||
|  | name = "docsmg" | ||||||
|  | version = "0.1.0" | ||||||
|  | edition = "2021" | ||||||
|  |  | ||||||
|  | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html | ||||||
|  |  | ||||||
|  | [dependencies] | ||||||
|  | anyhow = "1.0.86" | ||||||
|  | clap = { version = "4.5.9", features = ["derive", "env"] } | ||||||
|  | colored = "2.1.0" | ||||||
|  | lazy_static = "1.5.0" | ||||||
|  | regex = "1.10.5" | ||||||
|  | tokio = "1.38.0" | ||||||
							
								
								
									
										2
									
								
								website/scripts/docsmg/m.bash
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										2
									
								
								website/scripts/docsmg/m.bash
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,2 @@ | |||||||
|  | #!/bin/bash | ||||||
|  | docsmg move $1 $2 | tee -a migratefile | ||||||
							
								
								
									
										23
									
								
								website/scripts/docsmg/mcomplete.bash
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										23
									
								
								website/scripts/docsmg/mcomplete.bash
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,23 @@ | |||||||
|  | #!/bin/bash | ||||||
|  |  | ||||||
|  | _completions () { | ||||||
|  | 	if [[ -z "${MIGRATE_PATH}" ]]; | ||||||
|  | 	then MIGRATE_PATH="./"; | ||||||
|  | 	else MIGRATE_PATH="${MIGRATE_PATH}"; fi | ||||||
|  |  | ||||||
|  | 	if [[ -z "${TMP_STRUCTURE_PATH}" ]]; | ||||||
|  | 	then TMP_STRUCTURE_PATH="./tmp/"; | ||||||
|  | 	else TMP_STRUCTURE_PATH="${TMP_STRUCTURE_PATH}"; fi | ||||||
|  |  | ||||||
|  | 	if [[ $1 = $3 ]]; | ||||||
|  | 	then LSPATH="$MIGRATE_PATH"; | ||||||
|  | 	else LSPATH="$TMP_STRUCTURE_PATH"; fi | ||||||
|  |  | ||||||
|  | 	for i in $(compgen -f -- "$LSPATH$2" | cut -d "/" -f 2-); do | ||||||
|  | 		if [[ -d "$LSPATH$i" ]]; | ||||||
|  | 		then COMPREPLY+=("$i/"); | ||||||
|  | 		else COMPREPLY+=("$i"); fi | ||||||
|  | 	done | ||||||
|  | } | ||||||
|  |  | ||||||
|  | complete -o nospace -o filenames -F _completions m.bash | ||||||
							
								
								
									
										31
									
								
								website/scripts/docsmg/src/generate.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								website/scripts/docsmg/src/generate.rs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,31 @@ | |||||||
|  | use std::path::PathBuf; | ||||||
|  |  | ||||||
|  | use crate::{migratefile::read_migrate_file, recurse_directory}; | ||||||
|  |  | ||||||
|  | pub fn generate(migratefile: Option<PathBuf>, migrate_path: PathBuf) { | ||||||
|  |     // if there is a migrate file, read it and get the paths from the left side | ||||||
|  |     let paths: Vec<PathBuf> = match migratefile { | ||||||
|  |         Some(i) => { | ||||||
|  |             let contents = read_migrate_file(i); | ||||||
|  |             if let Ok(contents) = contents { | ||||||
|  |                 contents.iter().map(|x| x.0.clone()).collect() | ||||||
|  |             } else { | ||||||
|  |                 vec![] | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         None => { | ||||||
|  |             vec![] | ||||||
|  |         } | ||||||
|  |     }; | ||||||
|  |     // get rid of paths already in the specified migrate file | ||||||
|  |     let paths: Vec<PathBuf> = recurse_directory(migrate_path.clone()) | ||||||
|  |         .iter() | ||||||
|  |         .filter(|x| !paths.contains(x)) | ||||||
|  |         .filter_map(|x| x.strip_prefix(migrate_path.clone()).ok()) | ||||||
|  |         .map(|x| x.to_path_buf()) | ||||||
|  |         .collect(); | ||||||
|  |  | ||||||
|  |     for path in paths { | ||||||
|  |         println!("{} -> ", path.display()); | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										83
									
								
								website/scripts/docsmg/src/main.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								website/scripts/docsmg/src/main.rs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,83 @@ | |||||||
|  | use std::{fs, path::PathBuf}; | ||||||
|  |  | ||||||
|  | use clap::{Parser, Subcommand}; | ||||||
|  |  | ||||||
|  | mod generate; | ||||||
|  | mod migrate; | ||||||
|  | mod migratefile; | ||||||
|  | mod r#move; | ||||||
|  |  | ||||||
|  | #[derive(Parser)] | ||||||
|  | struct Cli { | ||||||
|  |     #[arg(long, env, default_value = "./")] | ||||||
|  |     migrate_path: PathBuf, | ||||||
|  |  | ||||||
|  |     #[command(subcommand)] | ||||||
|  |     command: Commands, | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #[derive(Subcommand)] | ||||||
|  | enum Commands { | ||||||
|  |     Move { | ||||||
|  |         old_path: PathBuf, | ||||||
|  |         new_path: PathBuf, | ||||||
|  |     }, | ||||||
|  |     Migrate { | ||||||
|  |         #[arg(long, name = "FILE", default_value = "./migratefile")] | ||||||
|  |         migratefile: PathBuf, | ||||||
|  |  | ||||||
|  |         #[arg(short, long)] | ||||||
|  |         quiet: bool, | ||||||
|  |     }, | ||||||
|  |     Unmigrate { | ||||||
|  |         #[arg(long, name = "FILE", default_value = "./migratefile")] | ||||||
|  |         migratefile: PathBuf, | ||||||
|  |  | ||||||
|  |         #[arg(short, long)] | ||||||
|  |         quiet: bool, | ||||||
|  |     }, | ||||||
|  |     Generate { | ||||||
|  |         #[arg(long, name = "FILE")] | ||||||
|  |         migratefile: Option<PathBuf>, | ||||||
|  |     }, | ||||||
|  | } | ||||||
|  |  | ||||||
|  | fn main() { | ||||||
|  |     let cli = Cli::parse(); | ||||||
|  |  | ||||||
|  |     match cli.command { | ||||||
|  |         Commands::Move { old_path, new_path } => r#move::r#move(old_path, new_path), | ||||||
|  |         Commands::Migrate { migratefile, quiet } => { | ||||||
|  |             migrate::migrate(quiet, migratefile, cli.migrate_path) | ||||||
|  |         } | ||||||
|  |         Commands::Unmigrate { migratefile, quiet } => { | ||||||
|  |             migrate::unmigrate(quiet, migratefile, cli.migrate_path) | ||||||
|  |         } | ||||||
|  |         Commands::Generate { migratefile } => generate::generate(migratefile, cli.migrate_path), | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | fn recurse_directory(path: PathBuf) -> Vec<PathBuf> { | ||||||
|  |     let paths = fs::read_dir(path).expect("path to exist"); | ||||||
|  |     let mut final_paths = vec![]; | ||||||
|  |     for path in paths { | ||||||
|  |         match path { | ||||||
|  |             Ok(path) => { | ||||||
|  |                 if !path.path().is_file() && !path.path().is_dir() { | ||||||
|  |                     continue; | ||||||
|  |                 } // dont go any further if not a file or directory | ||||||
|  |                 let is_dir = path.path().is_dir(); | ||||||
|  |                 let path = path.path(); | ||||||
|  |  | ||||||
|  |                 if is_dir { | ||||||
|  |                     let mut paths = recurse_directory(path); | ||||||
|  |                     final_paths.append(&mut paths); | ||||||
|  |                 } else { | ||||||
|  |                     final_paths.push(path); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             _ => {} | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     final_paths | ||||||
|  | } | ||||||
							
								
								
									
										212
									
								
								website/scripts/docsmg/src/migrate.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										212
									
								
								website/scripts/docsmg/src/migrate.rs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,212 @@ | |||||||
|  | use std::{ | ||||||
|  |     collections::HashMap, ffi::OsStr, fmt::format, fs::{read_to_string, write}, path::{Component, Path, PathBuf} | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | use colored::Colorize; | ||||||
|  | use lazy_static::lazy_static; | ||||||
|  |  | ||||||
|  | use crate::{migratefile::read_migrate_file, recurse_directory}; | ||||||
|  |  | ||||||
|  | pub fn migrate(quiet: bool, migratefile: PathBuf, migrate_path: PathBuf) { | ||||||
|  |     if !quiet { | ||||||
|  |         println!("Reading migrate file"); | ||||||
|  |     } | ||||||
|  |     let files = read_migrate_file(migratefile); | ||||||
|  |  | ||||||
|  |     let files = match files { | ||||||
|  |         Ok(i) => { | ||||||
|  |             if !quiet { | ||||||
|  |                 println!("{}", "Success".green()); | ||||||
|  |             } | ||||||
|  |             i | ||||||
|  |         } | ||||||
|  |         Err(_) => { | ||||||
|  |             println!("{}: Could not read migrate file", "Error".red()); | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     replace_links(migrate_path.clone(), files.clone()); | ||||||
|  |     let successful_moves = move_files(quiet, migrate_path.clone(), files); | ||||||
|  |     add_redirects(successful_moves.clone(), migrate_path.clone()); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | pub fn unmigrate(quiet: bool, migratefile: PathBuf, migrate_path: PathBuf) { | ||||||
|  |     if !quiet { | ||||||
|  |         println!("Reading migrate file"); | ||||||
|  |     } | ||||||
|  |     let files = read_migrate_file(migratefile); | ||||||
|  |  | ||||||
|  |     let files = match files { | ||||||
|  |         Ok(i) => { | ||||||
|  |             if !quiet { | ||||||
|  |                 println!("{}", "Success".green()); | ||||||
|  |             } | ||||||
|  |             i | ||||||
|  |         } | ||||||
|  |         Err(_) => { | ||||||
|  |             println!("{}: Could not read migrate file", "Error".red()); | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     let files: Vec<(PathBuf, PathBuf)> = files.iter().map(|x| (x.1.clone(), x.0.clone())).collect(); //switch files to reverse a migration | ||||||
|  |     replace_links(migrate_path.clone(), files.clone()); | ||||||
|  |     let successful_moves = move_files(quiet, migrate_path.clone(), files); | ||||||
|  |     let successful_moves: Vec<(PathBuf, PathBuf)> = successful_moves | ||||||
|  |         .iter() | ||||||
|  |         .map(|x| (x.1.clone(), x.0.clone())) | ||||||
|  |         .collect(); //switch files to reverse a migration | ||||||
|  |     remove_redirects(successful_moves, migrate_path); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | fn move_files( | ||||||
|  |     quiet: bool, | ||||||
|  |     migrate_path: PathBuf, | ||||||
|  |     files: Vec<(PathBuf, PathBuf)>, | ||||||
|  | ) -> Vec<(PathBuf, PathBuf)> { | ||||||
|  |     let mut successful_moves = vec![]; | ||||||
|  |     for file in files { | ||||||
|  |         if !quiet { | ||||||
|  |             print!("{} -> {} : ", file.0.display(), file.1.display()); | ||||||
|  |         } | ||||||
|  |         let rename: anyhow::Result<()> = (|| { | ||||||
|  |             let old_file = migrate_path.join(&file.0); | ||||||
|  |             let new_file = migrate_path.join(&file.1); | ||||||
|  |             std::fs::create_dir_all(&new_file.parent().expect("files to have a parent"))?; | ||||||
|  |             std::fs::rename(&old_file, &new_file)?; | ||||||
|  |             Ok(()) | ||||||
|  |         })(); | ||||||
|  |         match rename { | ||||||
|  |             Ok(_) => { | ||||||
|  |                 if !quiet { | ||||||
|  |                     println!("{}", "Success".green()); | ||||||
|  |                 } | ||||||
|  |                 successful_moves.push(file); | ||||||
|  |             } | ||||||
|  |             Err(_) => println!( | ||||||
|  |                 "{}: Could not move file {}", | ||||||
|  |                 "Error".red(), | ||||||
|  |                 file.0.display() | ||||||
|  |             ), | ||||||
|  |         }; | ||||||
|  |     } | ||||||
|  |     successful_moves | ||||||
|  | } | ||||||
|  |  | ||||||
|  | fn replace_links(migrate_path: PathBuf, successful_moves: Vec<(PathBuf, PathBuf)>) { | ||||||
|  |     lazy_static! { | ||||||
|  |         static ref find_link: regex::Regex = | ||||||
|  |             regex::Regex::new(r"\[(?<a>.*)\]\((?<b>.*)\)").unwrap(); | ||||||
|  |     } | ||||||
|  |     let files = recurse_directory(migrate_path.clone()); | ||||||
|  |  | ||||||
|  |     for file in files { | ||||||
|  |         let relative_file = file.strip_prefix(migrate_path.clone()).unwrap().to_path_buf(); | ||||||
|  |         let mut contents = match read_to_string(file.clone()) { | ||||||
|  |             Ok(i) => i, | ||||||
|  |             Err(_) => continue, | ||||||
|  |         }; | ||||||
|  |         let mut replace = vec![]; | ||||||
|  |         for successful_move in &successful_moves { | ||||||
|  |             if migrate_path.join(successful_move.0.clone()).canonicalize().unwrap()  | ||||||
|  |                 == file.clone().canonicalize().unwrap() { | ||||||
|  |                 continue; | ||||||
|  |             } | ||||||
|  |             let new_successful_move_from = make_path_relative(successful_move.0.clone(), relative_file.clone()); | ||||||
|  |             let new_successful_move_to = make_path_relative(successful_move.1.clone(), relative_file.clone()); | ||||||
|  |             replace.push((new_successful_move_from, new_successful_move_to)); | ||||||
|  |         } | ||||||
|  |         for i in replace { | ||||||
|  |             println!("{} : {} -> {}", file.display(), i.0.display(), i.1.display()); | ||||||
|  |             contents = contents.replace(&format!("({})", i.0.display()), &format!("({})", i.1.display())); | ||||||
|  |         } | ||||||
|  |         write(file, contents).unwrap(); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | fn make_path_relative(path: PathBuf, relative_to: PathBuf) -> PathBuf { | ||||||
|  |     let mut subdirs = 0; | ||||||
|  |     let path_components = path.components().collect::<Vec<_>>(); | ||||||
|  |     let relative_to_components = relative_to.components().collect::<Vec<_>>(); | ||||||
|  |     loop { | ||||||
|  |         if path_components.len() <= subdirs { | ||||||
|  |             break; | ||||||
|  |         } else if path_components[subdirs] | ||||||
|  |             != relative_to_components[subdirs] | ||||||
|  |         { | ||||||
|  |             break; | ||||||
|  |         } | ||||||
|  |         subdirs += 1; | ||||||
|  |     } | ||||||
|  |     let new_path = &path_components[subdirs..] | ||||||
|  |         .iter() | ||||||
|  |         .collect::<PathBuf>(); | ||||||
|  |     let backouts = | ||||||
|  |         (0..relative_to_components.len() - subdirs - 1) | ||||||
|  |             .map(|_| PathBuf::from("..")) | ||||||
|  |             .reduce(|acc, e| acc.join(e)) | ||||||
|  |             .unwrap_or(PathBuf::from("")); | ||||||
|  |     //println!("{}, {}", relative_to_components.len() - subdirs - 1, backouts.display()); | ||||||
|  |     let new_path = backouts.join(new_path); | ||||||
|  |     let new_path = if new_path | ||||||
|  |         .to_string_lossy() | ||||||
|  |         .to_string() | ||||||
|  |         .chars() | ||||||
|  |         .next() | ||||||
|  |         .unwrap() | ||||||
|  |         != '.' | ||||||
|  |     { | ||||||
|  |         PathBuf::from(".").join(new_path) | ||||||
|  |     } else { | ||||||
|  |         new_path | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     let new_path = if new_path.file_name() == Some(OsStr::new("index.md")) || new_path.file_name() == Some(OsStr::new("index.mdx")) { | ||||||
|  |         new_path.parent().unwrap().to_path_buf() | ||||||
|  |     } else { | ||||||
|  |         new_path | ||||||
|  |     }; | ||||||
|  |          | ||||||
|  |  | ||||||
|  |     new_path | ||||||
|  | } | ||||||
|  |  | ||||||
|  | fn add_redirects(successful_moves: Vec<(PathBuf, PathBuf)>, migrate_path: PathBuf) { | ||||||
|  |     let redirects = generate_redirects(successful_moves); | ||||||
|  |     let netlify_path = migrate_path.parent().unwrap().join("netlify.toml"); | ||||||
|  |     let mut netlify_contents = read_to_string(netlify_path.clone()).unwrap(); | ||||||
|  |     for redirect in redirects { | ||||||
|  |         netlify_contents.push_str(&redirect); | ||||||
|  |     } | ||||||
|  |     std::fs::write(netlify_path, netlify_contents).unwrap(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | fn remove_redirects(successful_moves: Vec<(PathBuf, PathBuf)>, migrate_path: PathBuf) { | ||||||
|  |     let redirects = generate_redirects(successful_moves); | ||||||
|  |     let netlify_path = migrate_path.parent().unwrap().join("netlify.toml"); | ||||||
|  |     let mut netlify_contents = read_to_string(netlify_path.clone()).unwrap(); | ||||||
|  |     for redirect in redirects { | ||||||
|  |         netlify_contents = netlify_contents.replace(&redirect, ""); | ||||||
|  |     } | ||||||
|  |     std::fs::write(netlify_path, netlify_contents).unwrap(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | fn generate_redirects(successful_moves: Vec<(PathBuf, PathBuf)>) -> Vec<String> { | ||||||
|  |     successful_moves | ||||||
|  |         .iter() | ||||||
|  |         .map(|x| { | ||||||
|  |             format!( | ||||||
|  |                 " | ||||||
|  | [[redirects]] | ||||||
|  |   from = \"{}\" | ||||||
|  |   to = \"{}\" | ||||||
|  |   status = 301 | ||||||
|  |   force = true | ||||||
|  | ", | ||||||
|  |                 x.0.display(), | ||||||
|  |                 x.1.display() | ||||||
|  |             ) | ||||||
|  |         }) | ||||||
|  |         .collect() | ||||||
|  | } | ||||||
							
								
								
									
										21
									
								
								website/scripts/docsmg/src/migratefile.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								website/scripts/docsmg/src/migratefile.rs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,21 @@ | |||||||
|  | use std::{fs::read_to_string, path::PathBuf}; | ||||||
|  |  | ||||||
|  | pub fn read_migrate_file(file: PathBuf) -> anyhow::Result<Vec<(PathBuf, PathBuf)>> { | ||||||
|  |     let contents = read_to_string(file)?; | ||||||
|  |     let lines: Vec<String> = contents | ||||||
|  |         .split('\n') | ||||||
|  |         .map(|x| x.to_owned()) | ||||||
|  |         .filter(|x| x != "") | ||||||
|  |         .collect(); | ||||||
|  |     let migrations = lines | ||||||
|  |         .iter() | ||||||
|  |         .filter_map(|x| x.split_once(" -> ")) | ||||||
|  |         .map(|x| { | ||||||
|  |             ( | ||||||
|  |                 x.0.parse().expect("a valid path"), | ||||||
|  |                 x.1.parse().expect("a valid path"), | ||||||
|  |             ) | ||||||
|  |         }) | ||||||
|  |         .collect::<Vec<_>>(); | ||||||
|  |     Ok(migrations) | ||||||
|  | } | ||||||
							
								
								
									
										23
									
								
								website/scripts/docsmg/src/move.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								website/scripts/docsmg/src/move.rs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,23 @@ | |||||||
|  | use std::path::PathBuf; | ||||||
|  |  | ||||||
|  | use crate::recurse_directory; | ||||||
|  |  | ||||||
|  | pub fn r#move(old_path: PathBuf, new_path: PathBuf) { | ||||||
|  |     let is_dir = old_path.is_dir(); | ||||||
|  |     if is_dir { | ||||||
|  |         let paths = recurse_directory(old_path.clone()); | ||||||
|  |         for path in paths { | ||||||
|  |             let raw_path = path | ||||||
|  |                 .strip_prefix(old_path.clone()) | ||||||
|  |                 .expect("path to be within old path"); | ||||||
|  |             let new_path = new_path.join(raw_path); | ||||||
|  |             println!("{} -> {}", path.display(), new_path.display()); | ||||||
|  |         } | ||||||
|  |     } else { | ||||||
|  |         println!( | ||||||
|  |             "{} -> {}", | ||||||
|  |             old_path.to_string_lossy(), | ||||||
|  |             new_path.to_string_lossy() | ||||||
|  |         ); | ||||||
|  |     } | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user
	 Bama
					Bama