diff rust/rhg/src/commands/status.rs @ 52395:136e74c2bf8f

rhg: fix bug with matchers in rhg status --rev --rev The fix was simply to move up the block of code that initializes the matcher from the arguments.
author Mitchell Kember <mkember@janestreet.com>
date Tue, 03 Dec 2024 15:27:50 -0500
parents 393ad2685fb4
children 42bd36bbed67
line wrap: on
line diff
--- a/rust/rhg/src/commands/status.rs	Tue Dec 03 15:14:59 2024 -0500
+++ b/rust/rhg/src/commands/status.rs	Tue Dec 03 15:27:50 2024 -0500
@@ -454,7 +454,46 @@
             filesystem_time_at_status_start,
         ))
     };
+
     let (narrow_matcher, narrow_warnings) = narrow::matcher(repo)?;
+    let (sparse_matcher, sparse_warnings) = sparse::matcher(repo)?;
+    let matcher = match (repo.has_narrow(), repo.has_sparse()) {
+        (true, true) => {
+            Box::new(IntersectionMatcher::new(narrow_matcher, sparse_matcher))
+        }
+        (true, false) => narrow_matcher,
+        (false, true) => sparse_matcher,
+        (false, false) => Box::new(AlwaysMatcher),
+    };
+    let matcher = match args.get_many::<std::ffi::OsString>("file") {
+        None => matcher,
+        Some(files) => {
+            let patterns: Vec<Vec<u8>> = files
+                .filter(|s| !s.is_empty())
+                .map(get_bytes_from_os_str)
+                .collect();
+            for file in &patterns {
+                if file.starts_with(b"set:") {
+                    return Err(CommandError::unsupported("fileset"));
+                }
+            }
+            let cwd = hg::utils::current_dir()?;
+            let root = repo.working_directory_path();
+            let ignore_patterns = parse_pattern_args(patterns, &cwd, root)?;
+            let files_matcher =
+                hg::matchers::PatternMatcher::new(ignore_patterns)?;
+            Box::new(IntersectionMatcher::new(
+                Box::new(files_matcher),
+                matcher,
+            ))
+        }
+    };
+    print_narrow_sparse_warnings(
+        &narrow_warnings,
+        &sparse_warnings,
+        ui,
+        repo,
+    )?;
 
     if let Some((rev1, rev2)) = revpair {
         let mut ds_status = DirstateStatus::default();
@@ -465,10 +504,7 @@
         }
 
         let stat = hg::operations::status_rev_rev_no_copies(
-            repo,
-            rev1,
-            rev2,
-            narrow_matcher,
+            repo, rev1, rev2, matcher,
         )?;
         for entry in stat.iter() {
             let (path, status) = entry?;
@@ -503,45 +539,6 @@
         return Ok(());
     }
 
-    let (sparse_matcher, sparse_warnings) = sparse::matcher(repo)?;
-    let matcher = match (repo.has_narrow(), repo.has_sparse()) {
-        (true, true) => {
-            Box::new(IntersectionMatcher::new(narrow_matcher, sparse_matcher))
-        }
-        (true, false) => narrow_matcher,
-        (false, true) => sparse_matcher,
-        (false, false) => Box::new(AlwaysMatcher),
-    };
-    let matcher = match args.get_many::<std::ffi::OsString>("file") {
-        None => matcher,
-        Some(files) => {
-            let patterns: Vec<Vec<u8>> = files
-                .filter(|s| !s.is_empty())
-                .map(get_bytes_from_os_str)
-                .collect();
-            for file in &patterns {
-                if file.starts_with(b"set:") {
-                    return Err(CommandError::unsupported("fileset"));
-                }
-            }
-            let cwd = hg::utils::current_dir()?;
-            let root = repo.working_directory_path();
-            let ignore_patterns = parse_pattern_args(patterns, &cwd, root)?;
-            let files_matcher =
-                hg::matchers::PatternMatcher::new(ignore_patterns)?;
-            Box::new(IntersectionMatcher::new(
-                Box::new(files_matcher),
-                matcher,
-            ))
-        }
-    };
-
-    print_narrow_sparse_warnings(
-        &narrow_warnings,
-        &sparse_warnings,
-        ui,
-        repo,
-    )?;
     let (fixup, mut dirstate_write_needed, filesystem_time_at_status_start) =
         dmap.with_status(
             matcher.as_ref(),