Merge "Export type info."
diff --git a/tools/cargo_embargo/src/bp.rs b/tools/cargo_embargo/src/bp.rs
index 5c661dc..9364c5b 100644
--- a/tools/cargo_embargo/src/bp.rs
+++ b/tools/cargo_embargo/src/bp.rs
@@ -16,13 +16,14 @@
 use std::collections::BTreeMap;
 
 /// Build module.
+#[derive(Clone, PartialEq, Eq, PartialOrd, Ord)]
 pub struct BpModule {
     module_type: String,
     pub props: BpProperties,
 }
 
 /// Properties of a build module, or of a nested object value.
-#[derive(Clone, PartialEq, Eq)]
+#[derive(Clone, PartialEq, Eq, PartialOrd, Ord)]
 pub struct BpProperties {
     map: BTreeMap<String, BpValue>,
     /// A raw block of text to append after the last key-value pair, but before the closing brace.
@@ -43,7 +44,7 @@
     pub raw_block: Option<String>,
 }
 
-#[derive(Clone, PartialEq, Eq)]
+#[derive(Clone, PartialEq, Eq, PartialOrd, Ord)]
 pub enum BpValue {
     Object(BpProperties),
     Bool(bool),
diff --git a/tools/cargo_embargo/src/main.rs b/tools/cargo_embargo/src/main.rs
index dd2caf5..83ee896 100644
--- a/tools/cargo_embargo/src/main.rs
+++ b/tools/cargo_embargo/src/main.rs
@@ -373,6 +373,12 @@
         return Ok(());
     }
 
+    // In some cases there are nearly identical rustc invocations that that get processed into
+    // identical BP modules. So far, dedup'ing them is a good enough fix. At some point we might
+    // need something more complex, maybe like cargo2android's logic for merging crates.
+    modules.sort();
+    modules.dedup();
+
     modules.sort_by_key(|m| m.props.get_string("name").to_string());
     for m in modules {
         m.write(&mut bp_contents)?;
diff --git a/tools/repo_pull/gerrit.py b/tools/repo_pull/gerrit.py
index 5cc3f8a..c93461d 100755
--- a/tools/repo_pull/gerrit.py
+++ b/tools/repo_pull/gerrit.py
@@ -495,6 +495,14 @@
     return _make_json_post_request(url_opener, url, {})
 
 
+def delete(url_opener, gerrit_url, change_id):
+    """Delete a change list."""
+
+    url = '{}/a/changes/{}'.format(gerrit_url, change_id)
+
+    return _make_json_post_request(url_opener, url, {}, method='DELETE')
+
+
 def set_topic(url_opener, gerrit_url, change_id, name):
     """Set the topic name."""
 
diff --git a/tools/repo_pull/repo_review.py b/tools/repo_pull/repo_review.py
index d0d6f58..c431ac8 100755
--- a/tools/repo_pull/repo_review.py
+++ b/tools/repo_pull/repo_review.py
@@ -32,7 +32,7 @@
 
 from gerrit import (
     abandon, add_common_parse_args, add_reviewers, create_url_opener_from_args,
-    delete_reviewer, delete_topic, find_gerrit_name, normalize_gerrit_name,
+    delete, delete_reviewer, delete_topic, find_gerrit_name, normalize_gerrit_name,
     query_change_lists, restore, set_hashtags, set_review, set_topic, submit
 )
 
@@ -96,6 +96,7 @@
 
     parser.add_argument('--abandon', help='Abandon a CL with a message')
     parser.add_argument('--restore', action='store_true', help='Restore a CL')
+    parser.add_argument('--delete', action='store_true', help='Delete a CL')
 
     parser.add_argument('--add-hashtag', action='append', help='Add hashtag')
     parser.add_argument('--remove-hashtag', action='append',
@@ -126,6 +127,8 @@
         return True
     if args.restore:
         return True
+    if args.delete:
+        return True
     if args.add_hashtag or args.remove_hashtag:
         return True
     if args.set_topic or args.delete_topic:
@@ -196,7 +199,7 @@
     if not _has_task(args):
         print('error: Either --label, --message, --submit, --abandon, --restore, '
               '--add-hashtag, --remove-hashtag, --set-topic, --delete-topic, '
-              '--add-reviewer or --delete-reviewer must be specified',
+              '--add-reviewer, --delete-reviewer or --delete must be specified',
               file=sys.stderr)
         sys.exit(1)
 
@@ -247,6 +250,9 @@
         if args.restore:
             _do_task(change, restore, url_opener, args.gerrit, change['id'],
                      errors=errors)
+        if args.delete:
+            _do_task(change, delete, url_opener, args.gerrit, change['id'],
+                     errors=errors)
         if args.add_reviewer:
             _do_task(change, add_reviewers, url_opener, args.gerrit,
                      change['id'], new_reviewers, errors=errors)
diff --git a/vndk/tools/header-checker/android/envsetup.sh b/vndk/tools/header-checker/android/envsetup.sh
index 44eaa1c..ead5508 100644
--- a/vndk/tools/header-checker/android/envsetup.sh
+++ b/vndk/tools/header-checker/android/envsetup.sh
@@ -15,5 +15,5 @@
 # limitations under the License.
 
 export LLVM_BUILD_HOST_TOOLS=true
-export LLVM_PREBUILTS_VERSION=clang-r487747
+export LLVM_PREBUILTS_VERSION=clang-r487747c
 export LLVM_RELEASE_VERSION=17