Extract function to record if a feature was seen before
authorDirkjan Ochtman <dirkjan@ochtman.nl>
Mon, 2 Oct 2017 15:57:24 +0000 (17:57 +0200)
committerDirkjan Ochtman <dirkjan@ochtman.nl>
Mon, 30 Oct 2017 19:22:28 +0000 (20:22 +0100)
src/cargo/core/resolver/mod.rs

index 699ea5c66adb02a8000ade4614c713eb7b58e77f..8b512b90eef3e30e3d3428c6be85810d4e2b69cc 100644 (file)
@@ -891,6 +891,15 @@ impl<'r> Requirements<'r> {
             .1.push(feat.to_string());
     }
 
+    fn seen(&mut self, feat: &'r str) -> bool {
+        if self.visited.insert(feat) {
+            self.used.insert(feat);
+            false
+        } else {
+            true
+        }
+    }
+
     fn add_feature(&mut self, feat: &'r str) -> CargoResult<()> {
         if feat.is_empty() { return Ok(()) }
 
@@ -907,13 +916,9 @@ impl<'r> Requirements<'r> {
             }
             None => {
                 let feat = feat_or_package;
-
-                //if this feature has already been added, then just return Ok
-                if !self.visited.insert(feat) {
+                if self.seen(feat) {
                     return Ok(());
                 }
-
-                self.used.insert(feat);
                 match self.summary.features().get(feat) {
                     Some(recursive) => {
                         // This is a feature, add it recursively.