Skip to content

Commit 4488aed

Browse files
committed
feat(tools): add validate-redirects and support locale arg
* add validate-redirects command * support locale arguments for fix-redirects
1 parent 5e2cccf commit 4488aed

File tree

9 files changed

+277
-97
lines changed

9 files changed

+277
-97
lines changed

crates/rari-cli/main.rs

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ use rari_tools::add_redirect::add_redirect;
3131
use rari_tools::history::gather_history;
3232
use rari_tools::inventory::gather_inventory;
3333
use rari_tools::r#move::r#move;
34-
use rari_tools::redirects::fix_redirects;
34+
use rari_tools::redirects::{fix_redirects, validate_redirects};
3535
use rari_tools::remove::remove;
3636
use rari_tools::sidebars::{fmt_sidebars, sync_sidebars};
3737
use rari_tools::sync_translated_content::sync_translated_content;
@@ -104,7 +104,9 @@ enum ContentSubcommand {
104104
///
105105
/// This shortens multiple redirect chains to single ones.
106106
/// This is also run as part of sync_translated_content.
107-
FixRedirects,
107+
FixRedirects(FixRedirectArgs),
108+
/// Validate redirects.
109+
ValidateRedirects(ValidateRedirectArgs),
108110
/// Create content inventory as JSON
109111
Inventory,
110112
}
@@ -136,6 +138,16 @@ struct AddRedirectArgs {
136138
to_url: String,
137139
}
138140

141+
#[derive(Args)]
142+
struct ValidateRedirectArgs {
143+
locales: Option<Vec<Locale>>,
144+
}
145+
146+
#[derive(Args)]
147+
struct FixRedirectArgs {
148+
locales: Option<Vec<Locale>>,
149+
}
150+
139151
#[derive(Args)]
140152
struct SyncTranslatedContentArgs {
141153
locales: Option<Vec<Locale>>,
@@ -467,8 +479,11 @@ fn main() -> Result<(), Error> {
467479
ContentSubcommand::SyncSidebars => {
468480
sync_sidebars()?;
469481
}
470-
ContentSubcommand::FixRedirects => {
471-
fix_redirects()?;
482+
ContentSubcommand::FixRedirects(args) => {
483+
fix_redirects(args.locales.as_deref())?;
484+
}
485+
ContentSubcommand::ValidateRedirects(args) => {
486+
validate_redirects(args.locales.as_deref())?;
472487
}
473488
ContentSubcommand::Inventory => {
474489
gather_inventory()?;

crates/rari-tools/src/add_redirect.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ mod test {
9696
];
9797
let _docs = DocFixtures::new(&slugs, Locale::EnUs);
9898
let _redirects = RedirectFixtures::new(
99-
&vec![(
99+
&[(
100100
"docs/Web/API/Something".to_string(),
101101
"docs/Web/API/SomethingElse".to_string(),
102102
)],
@@ -122,7 +122,7 @@ mod test {
122122
fn test_add_redirect_missing_target() {
123123
let slugs = vec!["Web/API/ExampleOne".to_string()];
124124
let _docs = DocFixtures::new(&slugs, Locale::EnUs);
125-
let _redirects = RedirectFixtures::new(&vec![], Locale::EnUs);
125+
let _redirects = RedirectFixtures::new(&[], Locale::EnUs);
126126

127127
let result = do_add_redirect(
128128
"/en-US/docs/Web/API/ExampleGone",
@@ -136,8 +136,8 @@ mod test {
136136
let slugs = vec!["Web/API/ExampleOne".to_string()];
137137
let _docs = DocFixtures::new(&slugs, Locale::EnUs);
138138
let _docs_pt = DocFixtures::new(&slugs, Locale::PtBr);
139-
let _redirects = RedirectFixtures::new(&vec![], Locale::EnUs);
140-
let _redirects_pt = RedirectFixtures::new(&vec![], Locale::PtBr);
139+
let _redirects = RedirectFixtures::new(&[], Locale::EnUs);
140+
let _redirects_pt = RedirectFixtures::new(&[], Locale::PtBr);
141141

142142
// Locales do not match
143143
let result = do_add_redirect(
@@ -166,7 +166,7 @@ mod test {
166166
fn test_add_redirect_external() {
167167
let slugs = vec!["Web/API/ExampleOne".to_string()];
168168
let _docs = DocFixtures::new(&slugs, Locale::EnUs);
169-
let _redirects = RedirectFixtures::new(&vec![], Locale::EnUs);
169+
let _redirects = RedirectFixtures::new(&[], Locale::EnUs);
170170

171171
let result = do_add_redirect("/en-US/docs/Web/API/ExampleGone", "https://example.com/");
172172
assert!(result.is_ok());

crates/rari-tools/src/error.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,10 @@ pub enum ToolError {
4545
InvalidRedirectFromURL(String),
4646
#[error("Invalid 'to' URL for redirect: {0}")]
4747
InvalidRedirectToURL(String),
48+
#[error("Invalid redirects: not in alphabetical order: {0} -> {1} before {2} -> {3}")]
49+
InvalidRedirectOrder(String, String, String, String),
50+
#[error("Invalid redirect for {0} -> {1} or {2} -> {3}")]
51+
InvalidRedirect(String, String, String, String),
4852
#[error(transparent)]
4953
RedirectError(#[from] RedirectError),
5054
#[error("Invalid yaml {0}")]

0 commit comments

Comments
 (0)