2 use core
::{Source, PackageIdSpec}
;
3 use sources
::{PathSource}
;
4 use util
::{CargoResult, human, Config}
;
6 pub fn pkgid(manifest_path
: &Path
,
8 config
: &Config
) -> CargoResult
<PackageIdSpec
> {
9 let mut source
= try
!(PathSource
::for_path(&manifest_path
.dir_path(),
11 try
!(source
.update());
12 let package
= try
!(source
.root_package());
14 let lockfile
= package
.root().join("Cargo.lock");
15 let source_id
= package
.package_id().source_id();
16 let resolve
= match try
!(ops
::load_lockfile(&lockfile
, source_id
)) {
17 Some(resolve
) => resolve
,
18 None
=> return Err(human("A Cargo.lock must exist for this command"))
21 let pkgid
= match spec
{
22 Some(spec
) => try
!(resolve
.query(spec
)),
23 None
=> package
.package_id(),
25 Ok(PackageIdSpec
::from_package_id(pkgid
))