소스 검색

Temporary workaround for Path in libgit2-rs

Ben S 11 년 전
부모
커밋
369a421359
1개의 변경된 파일12개의 추가작업 그리고 1개의 파일을 삭제
  1. 12 1
      src/dir.rs

+ 12 - 1
src/dir.rs

@@ -84,8 +84,19 @@ impl Git {
     /// Discover a Git repository on or above this directory, scanning it for
     /// the files' statuses if one is found.
     fn scan(path: &Path) -> Result<Git, git2::Error> {
+        use std::os::unix::OsStrExt;
+        use std::ffi::AsOsStr;
+
+        // TODO: libgit2-rs uses the new Path module, but exa still uses the
+        // old_path one, and will have to continue to do so until the new IO
+        // module gets a bit more developed. So we have to turn Paths into
+        // old_path::Paths. Yes, this is hacky, but hopefully temporary.
         let repo = try!(git2::Repository::discover(path));
-        let workdir = repo.workdir().unwrap_or(Path::new("."));
+        let workdir = match repo.workdir() {
+            Some(w) => Path::new(w.as_os_str().as_bytes()),
+            None => return Ok(Git { statuses: vec![] }),  // bare repo
+        };
+
         let statuses = try!(repo.statuses(None)).iter()
                                                 .map(|e| (workdir.join(e.path_bytes()), e.status()))
                                                 .collect();