@@ -30,8 +30,7 @@ func (l Lock) directDeps(root Package) map[string]struct{} {
30
30
return deps
31
31
}
32
32
33
- func (l Lock ) prodDeps (root Package ) map [string ]struct {} {
34
- packages := l .packages ()
33
+ func prodDeps (root Package , packages map [string ]Package ) map [string ]struct {} {
35
34
visited := make (map [string ]struct {})
36
35
walkPackageDeps (root , packages , visited )
37
36
return visited
@@ -51,14 +50,25 @@ func walkPackageDeps(pkg Package, packages map[string]Package, visited map[strin
51
50
}
52
51
}
53
52
54
- func (l Lock ) root () Package {
53
+ func (l Lock ) root () (Package , error ) {
54
+ var pkgs []Package
55
55
for _ , pkg := range l .Packages {
56
56
if pkg .isRoot () {
57
- return pkg
57
+ pkgs = append ( pkgs , pkg )
58
58
}
59
59
}
60
60
61
- return Package {}
61
+ if len (pkgs ) > 1 {
62
+ return Package {}, xerrors .New ("uv lockfile contains multiple root projects" )
63
+ }
64
+
65
+ // lock file must include root package
66
+ // cf. https://github.com/astral-sh/uv/blob/f80ddf10b63c3e7b421ca4658e63f97db1e0378c/crates/uv/src/commands/project/lock.rs#L933-L936
67
+ if len (pkgs ) != 1 {
68
+ return Package {}, xerrors .New ("uv lockfile does not contain a root package." )
69
+ }
70
+
71
+ return pkgs [0 ], nil
62
72
}
63
73
64
74
type Package struct {
@@ -94,16 +104,14 @@ func (p *Parser) Parse(r xio.ReadSeekerAt) ([]ftypes.Package, []ftypes.Dependenc
94
104
return nil , nil , xerrors .Errorf ("failed to decode uv lock file: %w" , err )
95
105
}
96
106
97
- rootPackage := lock .root ()
98
- // lock file must include root package
99
- // cf. https://github.com/astral-sh/uv/blob/f80ddf10b63c3e7b421ca4658e63f97db1e0378c/crates/uv/src/commands/project/lock.rs#L933-L936
100
- if rootPackage .Name == "" {
101
- return nil , nil , xerrors .New ("uv lockfile does not contain a root package." )
107
+ rootPackage , err := lock .root ()
108
+ if err != nil {
109
+ return nil , nil , err
102
110
}
103
111
104
112
packages := lock .packages ()
105
113
directDeps := lock .directDeps (rootPackage )
106
- prodDeps := lock . prodDeps (rootPackage )
114
+ prodDeps := prodDeps (rootPackage , packages )
107
115
108
116
var (
109
117
pkgs ftypes.Packages
0 commit comments