summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2024-05-14 23:22:45 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2024-05-14 23:22:45 +0000
commitb93eda458186c6380bccb4d154bae52a3d05e9ce (patch)
tree5d2c48dcd2e226218365d164e7cf3fb6d82c2ad9
parent6715b43048ea9ef5e4ed0c6dc39c5f3ef6d4f7b2 (diff)
parent47d955bca0a9076a9715f2b1a41156a3e0334abd (diff)
downloaddevelopment-b93eda458186c6380bccb4d154bae52a3d05e9ce.tar.gz
Merge "Snap for 11841552 from 4e208a021add39094b6d913a55dd583b434f92c2 to sdk-release" into sdk-release
-rw-r--r--tools/cargo_embargo/src/cargo/cargo_out.rs4
-rw-r--r--tools/cargo_embargo/src/cargo/metadata.rs168
-rw-r--r--tools/cargo_embargo/src/main.rs2
-rwxr-xr-xtools/repo_pull/gerrit.py26
-rw-r--r--tools/winscope/OWNERS1
5 files changed, 174 insertions, 27 deletions
diff --git a/tools/cargo_embargo/src/cargo/cargo_out.rs b/tools/cargo_embargo/src/cargo/cargo_out.rs
index 01ca55c95..fb2f00f64 100644
--- a/tools/cargo_embargo/src/cargo/cargo_out.rs
+++ b/tools/cargo_embargo/src/cargo/cargo_out.rs
@@ -410,9 +410,9 @@ impl Crate {
manifest_path,
)
})?;
- out.package_name = package_metadata.name.clone();
+ out.package_name.clone_from(&package_metadata.name);
out.version = Some(package_metadata.version.clone());
- out.edition = package_metadata.edition.clone();
+ out.edition.clone_from(&package_metadata.edition);
let output_filename = out.name.clone() + &extra_filename;
if let Some(test_contents) = tests.get(&output_filename).and_then(|m| m.get(&out.main_src))
diff --git a/tools/cargo_embargo/src/cargo/metadata.rs b/tools/cargo_embargo/src/cargo/metadata.rs
index 2958a0117..127c81630 100644
--- a/tools/cargo_embargo/src/cargo/metadata.rs
+++ b/tools/cargo_embargo/src/cargo/metadata.rs
@@ -24,12 +24,12 @@ use std::path::{Path, PathBuf};
/// `cfg` strings for dependencies which should be considered enabled. It would be better to parse
/// them properly, but this is good enough in practice so far.
const ENABLED_CFGS: [&str; 6] = [
- r#"cfg(unix)"#,
- r#"cfg(not(windows))"#,
- r#"cfg(any(unix, target_os = "wasi"))"#,
- r#"cfg(not(all(target_family = "wasm", target_os = "unknown")))"#,
- r#"cfg(not(target_family = "wasm"))"#,
- r#"cfg(any(target_os = "linux", target_os = "android"))"#,
+ r#"unix"#,
+ r#"not(windows)"#,
+ r#"any(unix, target_os = "wasi")"#,
+ r#"not(all(target_family = "wasm", target_os = "unknown"))"#,
+ r#"not(target_family = "wasm")"#,
+ r#"any(target_os = "linux", target_os = "android")"#,
];
/// `cargo metadata` output.
@@ -39,7 +39,7 @@ pub struct WorkspaceMetadata {
pub workspace_members: Vec<String>,
}
-#[derive(Clone, Debug, Deserialize, Eq, PartialEq)]
+#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq)]
pub struct PackageMetadata {
pub name: String,
pub version: String,
@@ -62,17 +62,20 @@ pub struct DependencyMetadata {
impl DependencyMetadata {
/// Returns whether the dependency should be included when the given features are enabled.
- fn enabled(&self, features: &[String]) -> bool {
+ fn enabled(&self, features: &[String], cfgs: &[String]) -> bool {
if let Some(target) = &self.target {
- if !ENABLED_CFGS.contains(&target.as_str()) {
- return false;
+ if target.starts_with("cfg(") && target.ends_with(')') {
+ let target_cfg = &target[4..target.len() - 1];
+ if !ENABLED_CFGS.contains(&target_cfg) && !cfgs.contains(&target_cfg.to_string()) {
+ return false;
+ }
}
}
!self.optional || features.contains(&format!("dep:{}", self.name))
}
}
-#[derive(Clone, Debug, Deserialize, Eq, PartialEq)]
+#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq)]
#[allow(dead_code)]
pub struct TargetMetadata {
pub crate_types: Vec<CrateType>,
@@ -103,12 +106,13 @@ pub enum TargetKind {
pub fn parse_cargo_metadata_str(cargo_metadata: &str, cfg: &VariantConfig) -> Result<Vec<Crate>> {
let metadata =
serde_json::from_str(cargo_metadata).context("failed to parse cargo metadata")?;
- parse_cargo_metadata(&metadata, &cfg.features, cfg.tests)
+ parse_cargo_metadata(&metadata, &cfg.features, &cfg.extra_cfg, cfg.tests)
}
fn parse_cargo_metadata(
metadata: &WorkspaceMetadata,
features: &Option<Vec<String>>,
+ cfgs: &[String],
include_tests: bool,
) -> Result<Vec<Crate>> {
let mut crates = Vec::new();
@@ -171,9 +175,11 @@ fn parse_cargo_metadata(
package,
&metadata.packages,
&features,
+ cfgs,
&target_kinds,
false,
)?,
+ cfgs: cfgs.to_owned(),
..Default::default()
});
}
@@ -193,9 +199,11 @@ fn parse_cargo_metadata(
package,
&metadata.packages,
&features,
+ cfgs,
&target_kinds,
true,
)?,
+ cfgs: cfgs.to_owned(),
..Default::default()
});
}
@@ -208,6 +216,7 @@ fn get_externs(
package: &PackageMetadata,
packages: &[PackageMetadata],
features: &[String],
+ cfgs: &[String],
target_kinds: &[TargetKind],
test: bool,
) -> Result<Vec<Extern>> {
@@ -216,7 +225,7 @@ fn get_externs(
.iter()
.filter_map(|dependency| {
// Kind is None for normal dependencies, as opposed to dev dependencies.
- if dependency.enabled(features)
+ if dependency.enabled(features, cfgs)
&& dependency.kind.as_deref() != Some("build")
&& (dependency.kind.is_none() || test)
{
@@ -440,6 +449,139 @@ mod tests {
}
#[test]
+ fn get_externs_cfg() {
+ let package = PackageMetadata {
+ name: "test_package".to_string(),
+ dependencies: vec![
+ DependencyMetadata {
+ name: "alwayslib".to_string(),
+ kind: None,
+ optional: false,
+ target: None,
+ rename: None,
+ },
+ DependencyMetadata {
+ name: "unixlib".to_string(),
+ kind: None,
+ optional: false,
+ target: Some("cfg(unix)".to_string()),
+ rename: None,
+ },
+ DependencyMetadata {
+ name: "windowslib".to_string(),
+ kind: None,
+ optional: false,
+ target: Some("cfg(windows)".to_string()),
+ rename: None,
+ },
+ ],
+ features: [].into_iter().collect(),
+ targets: vec![],
+ ..Default::default()
+ };
+ let packages = vec![
+ package.clone(),
+ PackageMetadata {
+ name: "alwayslib".to_string(),
+ targets: vec![TargetMetadata {
+ name: "alwayslib".to_string(),
+ kind: vec![TargetKind::Lib],
+ ..Default::default()
+ }],
+ ..Default::default()
+ },
+ PackageMetadata {
+ name: "unixlib".to_string(),
+ targets: vec![TargetMetadata {
+ name: "unixlib".to_string(),
+ kind: vec![TargetKind::Lib],
+ ..Default::default()
+ }],
+ ..Default::default()
+ },
+ PackageMetadata {
+ name: "windowslib".to_string(),
+ targets: vec![TargetMetadata {
+ name: "windowslib".to_string(),
+ kind: vec![TargetKind::Lib],
+ ..Default::default()
+ }],
+ ..Default::default()
+ },
+ ];
+ assert_eq!(
+ get_externs(&package, &packages, &[], &[], &[], false).unwrap(),
+ vec![
+ Extern {
+ name: "alwayslib".to_string(),
+ lib_name: "alwayslib".to_string(),
+ extern_type: ExternType::Rust
+ },
+ Extern {
+ name: "unixlib".to_string(),
+ lib_name: "unixlib".to_string(),
+ extern_type: ExternType::Rust
+ },
+ ]
+ );
+ }
+
+ #[test]
+ fn get_externs_extra_cfg() {
+ let package = PackageMetadata {
+ name: "test_package".to_string(),
+ dependencies: vec![
+ DependencyMetadata {
+ name: "foolib".to_string(),
+ kind: None,
+ optional: false,
+ target: Some("cfg(foo)".to_string()),
+ rename: None,
+ },
+ DependencyMetadata {
+ name: "barlib".to_string(),
+ kind: None,
+ optional: false,
+ target: Some("cfg(bar)".to_string()),
+ rename: None,
+ },
+ ],
+ features: [].into_iter().collect(),
+ targets: vec![],
+ ..Default::default()
+ };
+ let packages = vec![
+ package.clone(),
+ PackageMetadata {
+ name: "foolib".to_string(),
+ targets: vec![TargetMetadata {
+ name: "foolib".to_string(),
+ kind: vec![TargetKind::Lib],
+ ..Default::default()
+ }],
+ ..Default::default()
+ },
+ PackageMetadata {
+ name: "barlib".to_string(),
+ targets: vec![TargetMetadata {
+ name: "barlib".to_string(),
+ kind: vec![TargetKind::Lib],
+ ..Default::default()
+ }],
+ ..Default::default()
+ },
+ ];
+ assert_eq!(
+ get_externs(&package, &packages, &[], &["foo".to_string()], &[], false).unwrap(),
+ vec![Extern {
+ name: "foolib".to_string(),
+ lib_name: "foolib".to_string(),
+ extern_type: ExternType::Rust
+ },]
+ );
+ }
+
+ #[test]
fn parse_metadata() {
/// Remove anything before "external/rust/crates/" from the
/// `package_dir` field. This makes the test robust since you
diff --git a/tools/cargo_embargo/src/main.rs b/tools/cargo_embargo/src/main.rs
index 2f9ea44c2..425d19a69 100644
--- a/tools/cargo_embargo/src/main.rs
+++ b/tools/cargo_embargo/src/main.rs
@@ -929,7 +929,6 @@ fn crate_to_bp_modules(
.clone()
.into_iter()
.filter(|crate_cfg| !cfg.cfg_blocklist.contains(crate_cfg))
- .chain(cfg.extra_cfg.clone().into_iter())
.collect(),
);
@@ -1109,7 +1108,6 @@ fn crate_to_rulesmk(
.cfgs
.iter()
.filter(|crate_cfg| !cfg.cfg_blocklist.contains(crate_cfg))
- .chain(cfg.extra_cfg.iter())
.map(|cfg| format!("--cfg '{cfg}'")),
);
if !flags.is_empty() {
diff --git a/tools/repo_pull/gerrit.py b/tools/repo_pull/gerrit.py
index c93461d25..601c3ff5c 100755
--- a/tools/repo_pull/gerrit.py
+++ b/tools/repo_pull/gerrit.py
@@ -608,7 +608,7 @@ def _parse_args():
parser = argparse.ArgumentParser()
add_common_parse_args(parser)
parser.add_argument('--format', default='json',
- choices=['json', 'oneline'],
+ choices=['json', 'oneline', 'porcelain'],
help='Print format')
return parser.parse_args()
@@ -635,16 +635,22 @@ def main():
if args.format == 'json':
json.dump(change_lists, sys.stdout, indent=4, separators=(', ', ': '))
print() # Print the end-of-line
- elif args.format == 'oneline':
+ else:
+ if args.format == 'oneline':
+ format_str = ('{i:<8} {number:<16} {status:<20} '
+ '{change_id:<60} {project:<120} '
+ '{subject}')
+ else:
+ format_str = ('{i}\t{number}\t{status}\t'
+ '{change_id}\t{project}\t{subject}')
+
for i, change in enumerate(change_lists):
- print('{i:<8} {number:<16} {status:<20} ' \
- '{change_id:<60} {project:<120} ' \
- '{subject}'.format(i=i,
- project=change['project'],
- change_id=change['change_id'],
- status=change['status'],
- number=change['_number'],
- subject=change['subject']))
+ print(format_str.format(i=i,
+ project=change['project'],
+ change_id=change['change_id'],
+ status=change['status'],
+ number=change['_number'],
+ subject=change['subject']))
if __name__ == '__main__':
diff --git a/tools/winscope/OWNERS b/tools/winscope/OWNERS
index 9cb826f69..820c48a4c 100644
--- a/tools/winscope/OWNERS
+++ b/tools/winscope/OWNERS
@@ -3,3 +3,4 @@ pablogamito@google.com
keanmariotti@google.com
jjaggi@google.com
roosa@google.com
+priyankaspatel@google.com