Auto-fix executable permissions on discovered AppImages
This commit is contained in:
@@ -106,7 +106,14 @@ fn scan_directory(dir: &Path) -> Vec<DiscoveredAppImage> {
|
||||
.map(|n| n.to_string_lossy().into_owned())
|
||||
.unwrap_or_default();
|
||||
|
||||
let is_executable = metadata.permissions().mode() & 0o111 != 0;
|
||||
let mut is_executable = metadata.permissions().mode() & 0o111 != 0;
|
||||
if !is_executable {
|
||||
let perms = std::fs::Permissions::from_mode(0o755);
|
||||
if std::fs::set_permissions(&path, perms).is_ok() {
|
||||
is_executable = true;
|
||||
log::info!("Auto-fixed executable permission: {}", path.display());
|
||||
}
|
||||
}
|
||||
let modified_time = metadata.modified().ok();
|
||||
|
||||
results.push(DiscoveredAppImage {
|
||||
|
||||
@@ -193,6 +193,19 @@ fn register_dropped_files(
|
||||
});
|
||||
|
||||
let final_path = if in_scan_dir {
|
||||
// Ensure executable even if already in scan dir
|
||||
#[cfg(unix)]
|
||||
{
|
||||
use std::os::unix::fs::PermissionsExt;
|
||||
if let Ok(meta) = std::fs::metadata(file) {
|
||||
if meta.permissions().mode() & 0o111 == 0 {
|
||||
let perms = std::fs::Permissions::from_mode(0o755);
|
||||
if let Err(e) = std::fs::set_permissions(file, perms) {
|
||||
log::warn!("Failed to set executable on {}: {}", file.display(), e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
file.clone()
|
||||
} else {
|
||||
let filename = file
|
||||
|
||||
Reference in New Issue
Block a user