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())
|
.map(|n| n.to_string_lossy().into_owned())
|
||||||
.unwrap_or_default();
|
.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();
|
let modified_time = metadata.modified().ok();
|
||||||
|
|
||||||
results.push(DiscoveredAppImage {
|
results.push(DiscoveredAppImage {
|
||||||
|
|||||||
@@ -193,6 +193,19 @@ fn register_dropped_files(
|
|||||||
});
|
});
|
||||||
|
|
||||||
let final_path = if in_scan_dir {
|
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()
|
file.clone()
|
||||||
} else {
|
} else {
|
||||||
let filename = file
|
let filename = file
|
||||||
|
|||||||
Reference in New Issue
Block a user