Explorar o código

fix(cli): root resource bundling on Windows, closes #3539 (#3685)

Lucas Fernandes Nogueira %!s(int64=3) %!d(string=hai) anos
pai
achega
4c84559e1f

+ 6 - 0
.changes/fix-windows-resources.md

@@ -0,0 +1,6 @@
+---
+"cli.rs": patch
+"cli.js": patch
+---
+
+Fixes resources bundling on Windows when the path is on the root of the Tauri folder.

+ 20 - 23
tooling/bundler/src/bundle/windows/msi/wix.rs

@@ -837,13 +837,16 @@ fn generate_resource_data(settings: &Settings) -> crate::Result<ResourceMap> {
     };
 
     // split the resource path directories
+    let components_count = src.components().count();
     let directories = src
       .components()
       .filter(|component| {
         let comp = component.as_os_str();
         comp != "." && comp != ".."
       })
+      .take(components_count - 1) // the last component is the file
       .collect::<Vec<_>>();
+
     // transform the directory structure to a chained vec structure
     let first_directory = directories
       .first()
@@ -866,9 +869,9 @@ fn generate_resource_data(settings: &Settings) -> crate::Result<ResourceMap> {
       .get_mut(&first_directory)
       .expect("Unable to handle resources");
 
-    let last_index = directories.len() - 1;
     let mut path = String::new();
-    for (i, directory) in directories.into_iter().enumerate() {
+    // the first component is already parsed on `first_directory` so we skip(1)
+    for directory in directories.into_iter().skip(1) {
       let directory_name = directory
         .as_os_str()
         .to_os_string()
@@ -877,30 +880,24 @@ fn generate_resource_data(settings: &Settings) -> crate::Result<ResourceMap> {
       path.push_str(directory_name.as_str());
       path.push(std::path::MAIN_SEPARATOR);
 
-      if i == last_index {
-        directory_entry.add_file(resource_entry);
-        break;
-      } else if i == 0 {
-        continue;
-      } else {
-        let index = directory_entry
-          .directories
-          .iter()
-          .position(|f| f.path == path);
-        match index {
-          Some(i) => directory_entry = directory_entry.directories.get_mut(i).unwrap(),
-          None => {
-            directory_entry.directories.push(ResourceDirectory {
-              path: path.clone(),
-              name: directory_name,
-              directories: vec![],
-              files: vec![],
-            });
-            directory_entry = directory_entry.directories.iter_mut().last().unwrap();
-          }
+      let index = directory_entry
+        .directories
+        .iter()
+        .position(|f| f.path == path);
+      match index {
+        Some(i) => directory_entry = directory_entry.directories.get_mut(i).unwrap(),
+        None => {
+          directory_entry.directories.push(ResourceDirectory {
+            path: path.clone(),
+            name: directory_name,
+            directories: vec![],
+            files: vec![],
+          });
+          directory_entry = directory_entry.directories.iter_mut().last().unwrap();
         }
       }
     }
+    directory_entry.add_file(resource_entry);
   }
 
   Ok(resources)