D6769: another way of implementing the parent
valentin.gatienbaron (Valentin Gatien-Baron)
phabricator at mercurial-scm.org
Wed Aug 28 11:37:34 UTC 2019
valentin.gatienbaron created this revision.
Herald added subscribers: mercurial-devel, kevincox, durin42.
Herald added a reviewer: hg-reviewers.
REVISION SUMMARY
I would drop this or fold it into the parent depending on reviewers' opinion.
The problem is that byte literals can converted to slices implicitely,
and concat can work on slices and other things, and it's too much for
the typer to try to do both at the time. Providing a monomorphic version
of the concat method avoids having to write &byteliteral[..].
REPOSITORY
rHG Mercurial
REVISION DETAIL
https://phab.mercurial-scm.org/D6769
AFFECTED FILES
rust/hg-core/src/filepatterns.rs
rust/hg-core/src/utils.rs
CHANGE DETAILS
diff --git a/rust/hg-core/src/utils.rs b/rust/hg-core/src/utils.rs
--- a/rust/hg-core/src/utils.rs
+++ b/rust/hg-core/src/utils.rs
@@ -37,6 +37,10 @@
}
}
+pub fn concat(slices: &[&[u8]]) -> Vec<u8> {
+ slices.concat()
+}
+
pub trait SliceExt {
fn trim_end(&self) -> &Self;
fn trim_start(&self) -> &Self;
diff --git a/rust/hg-core/src/filepatterns.rs b/rust/hg-core/src/filepatterns.rs
--- a/rust/hg-core/src/filepatterns.rs
+++ b/rust/hg-core/src/filepatterns.rs
@@ -8,7 +8,7 @@
//! Handling of Mercurial-specific patterns.
use crate::{
- utils::{files::get_path_from_bytes, SliceExt},
+ utils::{concat, files::get_path_from_bytes, SliceExt},
LineNumber, PatternError, PatternFileError,
};
use lazy_static::lazy_static;
@@ -158,20 +158,20 @@
if pattern[0] == b'^' {
return pattern.to_owned();
}
- [&b".*"[..], pattern].concat()
+ concat(&[b".*", pattern])
}
PatternSyntax::Path | PatternSyntax::RelPath => {
if pattern == b"." {
return vec![];
}
- [&escape_pattern(pattern), &b"(?:/|$)"[..]].concat()
+ concat(&[&escape_pattern(pattern), b"(?:/|$)"])
}
PatternSyntax::RootFiles => {
let mut res = if pattern == b"." {
vec![]
} else {
// Pattern is a directory name.
- [&escape_pattern(pattern), &b"/"[..]].concat()
+ concat(&[&escape_pattern(pattern), b"/"])
};
// Anything after the pattern must be a non-directory.
@@ -181,14 +181,14 @@
PatternSyntax::RelGlob => {
let glob_re = glob_to_re(pattern);
if let Some(rest) = glob_re.drop_prefix(b"[^/]*") {
- [&b".*"[..], rest, globsuffix].concat()
+ concat(&[b".*", rest, globsuffix])
} else {
- [&b"(?:|.*/)"[..], &glob_re, globsuffix].concat()
+ concat(&[b"(?:|.*/)", &glob_re, globsuffix])
}
}
PatternSyntax::Glob
| PatternSyntax::RootGlob => {
- [&glob_to_re(pattern), globsuffix].concat()
+ concat(&[&glob_to_re(pattern), globsuffix])
}
}
}
To: valentin.gatienbaron, #hg-reviewers
Cc: durin42, kevincox, mercurial-devel
More information about the Mercurial-devel
mailing list