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