11"lock"
22
3+ load ("@bazel_skylib//lib:new_sets.bzl" , "sets" )
34load (":util.bzl" , "util" )
45
56def _make_package_key (name , version , arch ):
@@ -29,17 +30,22 @@ def _add_package(lock, package, arch):
2930 "dependencies" : [],
3031 })
3132 lock .fast_package_lookup [k ] = len (lock .packages ) - 1
33+ lock .fast_package_dependencies_lookup [k ] = sets .make ()
3234
3335def _add_package_dependency (lock , package , dependency , arch ):
3436 k = _package_key (package , arch )
3537 if k not in lock .fast_package_lookup :
3638 fail ("Broken state: %s is not in the lockfile." % package ["Package" ])
3739 i = lock .fast_package_lookup [k ]
38- lock .packages [i ]["dependencies" ].append (dict (
39- key = _package_key (dependency , arch ),
40- name = dependency ["Package" ],
41- version = dependency ["Version" ],
42- ))
40+
41+ dependency_key = _package_key (dependency , arch )
42+ if not sets .contains (lock .fast_package_dependencies_lookup [k ], dependency_key ):
43+ lock .packages [i ]["dependencies" ].append (dict (
44+ key = dependency_key ,
45+ name = dependency ["Package" ],
46+ version = dependency ["Version" ],
47+ ))
48+ lock .fast_package_dependencies_lookup [k ] = sets .insert (lock .fast_package_dependencies_lookup [k ], dependency_key )
4349
4450def _has_package (lock , name , version , arch ):
4551 key = "%s_%s_%s" % (util .sanitize (name ), util .sanitize (version ), arch )
@@ -60,6 +66,7 @@ def _empty(rctx):
6066 version = 1 ,
6167 packages = list (),
6268 fast_package_lookup = dict (),
69+ fast_package_dependencies_lookup = dict (),
6370 )
6471 return _create (rctx , lock )
6572
@@ -75,6 +82,7 @@ def _from_json(rctx, content):
7582 version = lock ["version" ],
7683 packages = lock ["packages" ],
7784 fast_package_lookup = dict (),
85+ fast_package_dependencies_lookup = dict (),
7886 )
7987 for (i , package ) in enumerate (lock .packages ):
8088 # TODO: only support urls before 1.0
@@ -83,6 +91,7 @@ def _from_json(rctx, content):
8391
8492 lock .packages [i ] = package
8593 lock .fast_package_lookup [package ["key" ]] = i
94+ lock .fast_package_dependencies_lookup [package ["key" ]] = sets .make ([d ["key" ] for d in package ["dependencies" ]])
8695 return _create (rctx , lock )
8796
8897lockfile = struct (
0 commit comments