]> git.lizzy.rs Git - rust.git/commitdiff
Don't crash on empty out_dirs with older cargos
authorAleksey Kladov <aleksey.kladov@gmail.com>
Tue, 30 Jun 2020 20:12:27 +0000 (22:12 +0200)
committerAleksey Kladov <aleksey.kladov@gmail.com>
Tue, 30 Jun 2020 20:12:27 +0000 (22:12 +0200)
closes #5125

crates/ra_project_model/src/cargo_workspace.rs

index 3b124020d2728f742801da8bf49157c0c45e507d..47a1d393dbf47576616dad953ec83dfeca4c011d 100644 (file)
@@ -1,6 +1,11 @@
 //! FIXME: write short doc here
 
-use std::{ffi::OsStr, ops, path::Path, process::Command};
+use std::{
+    ffi::OsStr,
+    ops,
+    path::{Path, PathBuf},
+    process::Command,
+};
 
 use anyhow::{Context, Result};
 use cargo_metadata::{BuildScript, CargoOpt, Message, MetadataCommand, PackageId};
@@ -308,9 +313,13 @@ pub fn load_extern_resources(
         if let Ok(message) = message {
             match message {
                 Message::BuildScriptExecuted(BuildScript { package_id, out_dir, cfgs, .. }) => {
-                    let out_dir = AbsPathBuf::assert(out_dir);
-                    res.out_dirs.insert(package_id.clone(), out_dir);
-                    res.cfgs.insert(package_id, cfgs);
+                    // cargo_metadata crate returns default (empty) path for
+                    // older cargos, which is not absolute, so work around that.
+                    if out_dir != PathBuf::default() {
+                        let out_dir = AbsPathBuf::assert(out_dir);
+                        res.out_dirs.insert(package_id.clone(), out_dir);
+                        res.cfgs.insert(package_id, cfgs);
+                    }
                 }
                 Message::CompilerArtifact(message) => {
                     if message.target.kind.contains(&"proc-macro".to_string()) {