Better Python detection (fix #187)
This commit is contained in:
@@ -78,7 +78,7 @@ fn run() -> Result<(), Error> {
|
|||||||
let mut builder = formatted_timed_builder();
|
let mut builder = formatted_timed_builder();
|
||||||
|
|
||||||
if config.verbose() {
|
if config.verbose() {
|
||||||
builder.filter(Some("topgrade"), LevelFilter::Debug);
|
builder.filter(Some("topgrade"), LevelFilter::Trace);
|
||||||
}
|
}
|
||||||
|
|
||||||
builder.init();
|
builder.init();
|
||||||
|
|||||||
@@ -4,8 +4,11 @@ use crate::terminal::{print_separator, print_warning};
|
|||||||
use crate::utils::{require, require_option, which};
|
use crate::utils::{require, require_option, which};
|
||||||
use failure::ResultExt;
|
use failure::ResultExt;
|
||||||
use ini::Ini;
|
use ini::Ini;
|
||||||
|
use log::{debug, error};
|
||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use std::path::PathBuf;
|
use std::io;
|
||||||
|
use std::path::{Path, PathBuf};
|
||||||
|
use std::process::{Command, Output};
|
||||||
use walkdir::WalkDir;
|
use walkdir::WalkDir;
|
||||||
|
|
||||||
static OS_RELEASE_PATH: &str = "/etc/os-release";
|
static OS_RELEASE_PATH: &str = "/etc/os-release";
|
||||||
@@ -29,6 +32,16 @@ pub enum Distribution {
|
|||||||
Solus,
|
Solus,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns whether the given Python path is the system Python in Arch Linux
|
||||||
|
fn arch_system_python(path: &Path) -> Result<bool, io::Error> {
|
||||||
|
debug!("Python is in {}", path.display());
|
||||||
|
Command::new("pacman").arg("-Qqo").arg(&path).output().map(|output| {
|
||||||
|
debug!("Pacman output: {:?}", output);
|
||||||
|
let Output { status, stdout, .. } = output;
|
||||||
|
status.success() && String::from_utf8(stdout).unwrap() == "python\n"
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
impl Distribution {
|
impl Distribution {
|
||||||
fn parse_os_release(os_release: &ini::Ini) -> Result<Self, Error> {
|
fn parse_os_release(os_release: &ini::Ini) -> Result<Self, Error> {
|
||||||
let section = os_release.general_section();
|
let section = os_release.general_section();
|
||||||
@@ -111,7 +124,12 @@ fn upgrade_arch_linux(sudo: &Option<PathBuf>, cleanup: bool, run_type: RunType)
|
|||||||
|
|
||||||
if let Some(yay) = which("yay") {
|
if let Some(yay) = which("yay") {
|
||||||
if let Some(python) = which("python") {
|
if let Some(python) = which("python") {
|
||||||
if python != PathBuf::from("/usr/bin/python") {
|
let is_system_python = arch_system_python(&python).unwrap_or_else(|e| {
|
||||||
|
error!("Error detecting system Python: {}", e);
|
||||||
|
false
|
||||||
|
});
|
||||||
|
|
||||||
|
if !is_system_python {
|
||||||
print_warning(format!(
|
print_warning(format!(
|
||||||
"Python detected at {:?}, which is probably not the system Python.
|
"Python detected at {:?}, which is probably not the system Python.
|
||||||
It's dangerous to run yay since Python based AUR packages will be installed in the wrong location",
|
It's dangerous to run yay since Python based AUR packages will be installed in the wrong location",
|
||||||
|
|||||||
Reference in New Issue
Block a user