rust/hg-core/src/utils/files.rs
author Yuya Nishihara <yuya@tcha.org>
Sat, 15 Jun 2019 10:58:53 +0900
changeset 42484 f305f1d7d559
parent 42437 9609430d3625
child 42586 cad3dde7a573
permissions -rw-r--r--
rust-filepatterns: add comment about Windows path handling As I replied to the Phabricator message, this is wrong. And I even suspect it wouldn't compile because of multiple type mismatches. I think, in Rust where type system is rock solid, we can live with UTF-8 strings except for the bottom storage layer and the top UI/command layer. We'll still have to get around undecodable characters not to be lost, but I think it's okay to drop such filenames from match result if they don't match in UTF-8 world, not in Latin-1 world.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
42437
9609430d3625 rust-filepatterns: use bytes instead of String
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
     1
use std::path::Path;
9609430d3625 rust-filepatterns: use bytes instead of String
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
     2
9609430d3625 rust-filepatterns: use bytes instead of String
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
     3
pub fn get_path_from_bytes(bytes: &[u8]) -> &Path {
9609430d3625 rust-filepatterns: use bytes instead of String
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
     4
    let os_str;
9609430d3625 rust-filepatterns: use bytes instead of String
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
     5
    #[cfg(unix)]
9609430d3625 rust-filepatterns: use bytes instead of String
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
     6
    {
9609430d3625 rust-filepatterns: use bytes instead of String
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
     7
        use std::os::unix::ffi::OsStrExt;
9609430d3625 rust-filepatterns: use bytes instead of String
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
     8
        os_str = std::ffi::OsStr::from_bytes(bytes);
9609430d3625 rust-filepatterns: use bytes instead of String
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
     9
    }
9609430d3625 rust-filepatterns: use bytes instead of String
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
    10
    #[cfg(windows)]
9609430d3625 rust-filepatterns: use bytes instead of String
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
    11
    {
42484
f305f1d7d559 rust-filepatterns: add comment about Windows path handling
Yuya Nishihara <yuya@tcha.org>
parents: 42437
diff changeset
    12
        // TODO: convert from Windows MBCS (ANSI encoding) to WTF8.
f305f1d7d559 rust-filepatterns: add comment about Windows path handling
Yuya Nishihara <yuya@tcha.org>
parents: 42437
diff changeset
    13
        // Perhaps, the return type would have to be Result<PathBuf>.
42437
9609430d3625 rust-filepatterns: use bytes instead of String
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
    14
        use std::os::windows::ffi::OsStrExt;
9609430d3625 rust-filepatterns: use bytes instead of String
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
    15
        os_str = std::ffi::OsString::from_wide(bytes);
9609430d3625 rust-filepatterns: use bytes instead of String
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
    16
    }
9609430d3625 rust-filepatterns: use bytes instead of String
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
    17
9609430d3625 rust-filepatterns: use bytes instead of String
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
    18
    Path::new(os_str)
9609430d3625 rust-filepatterns: use bytes instead of String
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
    19
}