如何在Cargo中使用相对的git子模块路径?

时间:2018-07-11 16:17:47

标签: git rust git-submodules rust-cargo

我已经完成了Rust的MuPDF绑定,我想从其git存储库中将其作为板条箱导入。

我的Cargo.toml文件是这样的:

[package]
name = "package_name"
version = "0.1.0"
authors = ["me"]

[dependencies]
mupdf-sys = {git = "https://github.com/bruno-sm/mupdf-sys.git"}

问题是MuPDF将其第三方库存储为具有相对路径的git子模块。这是.gitmodules文件的摘录:

[submodule "thirdparty/jbig2dec"]
    path = thirdparty/jbig2dec
    url = ../jbig2dec.git
[submodule "thirdparty/mujs"]
    path = thirdparty/mujs
    url = ../mujs.git

运行cargo build时出现以下错误

Updating git repository `https://github.com/bruno-sm/mupdf-sys`
error: failed to load source for a dependency on `mupdf-sys`                     

Caused by:
  Unable to update https://github.com/bruno-sm/mupdf-sys

Caused by:
  failed to update submodule `mupdf`

Caused by:
  failed to update submodule `thirdparty/curl`

Caused by:
  invalid url `../thirdparty-curl.git`: relative URL without a base

这表明未指定MuPDF存储库的基本URL,但是它在文件.git/modules/mupdf/config

[remote "origin"]
url = git://git.ghostscript.com/mupdf.git
fetch = +refs/heads/*:refs/remotes/origin/*

使用git clone --recursive https://github.com/bruno-sm/mupdf-sys克隆存储库没有问题,所以我不知道问题出在哪里。

要重现该错误,您必须使用cargo new project_name创建一个新项目,添加

[dependencies]
mupdf-sys = {git = "https://github.com/bruno-sm/mupdf-sys.git"}

到Cargo.toml文件并运行cargo build

要查看MuPDF存储库的内容,可以使用git clone --recursive git://git.ghostscript.com/mupdf.git

1 个答案:

答案 0 :(得分:0)

  

问题是MuPDF将其第三方库存储为具有相对路径的git子模块

因此,您需要在相对路径中提供这些存储库。在jbig2dec文件下列出的相对位置克隆mujs.gitmodules存储库。现在,当您执行--recurse-submodules时,它应该可以正常工作。