Cherry-pick of https://github.com/rust-lang/cargo/pull/8775, so that
cargo works with git worktrees.

diff --git a/src/tools/cargo/src/cargo/sources/path.rs b/src/tools/cargo/src/cargo/sources/path.rs
index 64b0f77ed..f7dcfee7b 100644
--- a/src/tools/cargo/src/cargo/sources/path.rs
+++ b/src/tools/cargo/src/cargo/sources/path.rs
@@ -191,12 +191,25 @@ impl<'cfg> PathSource<'cfg> {
         let index = repo
             .index()
             .chain_err(|| format!("failed to open git index at {}", repo.path().display()))?;
-        let repo_root = repo.workdir().ok_or_else(|| {
-            anyhow::format_err!(
+        let repo_root = if let Some(root) = repo.workdir() {
+            root
+        } else if !repo.is_bare() {
+            // Sparse-checkouts (and possibly other git
+            // configurations) make libgit2 confused but there's still
+            // an actual non-bare repo here.
+            if let Some(r) = repo.path().parent() {
+                r
+            } else {
+                return Err(anyhow::format_err!(
+                    "repo path missing .git subfolder even when non-bare",
+                ));
+            }
+        } else {
+            return Err(anyhow::format_err!(
                 "did not expect repo at {} to be bare",
                 repo.path().display()
-            )
-        })?;
+            ));
+        };
         let repo_relative_path = match paths::strip_prefix_canonical(root, repo_root) {
             Ok(p) => p,
             Err(e) => {
@@ -225,9 +238,21 @@ impl<'cfg> PathSource<'cfg> {
     ) -> CargoResult<Vec<PathBuf>> {
         warn!("list_files_git {}", pkg.package_id());
         let index = repo.index()?;
-        let root = repo
-            .workdir()
-            .ok_or_else(|| anyhow::format_err!("can't list files on a bare repository"))?;
+        let root = if let Some(root) = repo.workdir() {
+            root
+        } else if !repo.is_bare() {
+            // Sparse-checkouts (and possibly other git
+            // configurations) make libgit2 confused but there's still
+            // an actual non-bare repo here.
+            if let Some(r) = repo.path().parent() {
+                r
+            } else {
+                return Err(anyhow::format_err!("malformed non-bare repository root",));
+            }
+        } else {
+            return Err(anyhow::format_err!("can't list files on a bare repository",));
+        };
+
         let pkg_path = pkg.root();

         let mut ret = Vec::<PathBuf>::new();
