Closed petronny closed 4 years ago
有最小重现代码吗?
感觉有点难,不过应该是这个函数的锅。
我把两个地方的map打出来了,结果见下。
def get_dependency_map(
depman: DependencyManager, mods: LilacMods,
) -> Dict[str, Set[Dependency]]:
map: Dict[str, Set[Dependency]] = defaultdict(set)
shallow_map: Dict[str, Set[str]] = defaultdict(set)
rmap: Dict[str, Set[str]] = defaultdict(set)
for name, mod in mods.items():
depends = getattr(mod, 'repo_depends', ())
ds = [depman.get(d) for d in depends]
if ds:
for d in ds:
shallow_map[name].add(d.pkgname)
rmap[d.pkgname].add(name)
map[name].update(ds)
print(map['seafile'])
print(map['seafile-armv6h'])
print(map['seafile-armv7h'])
print(map['seafile-aarch64'])
print()
print(map['ccnet-server'])
print(map['ccnet-server-armv6h'])
print(map['ccnet-server-armv7h'])
print(map['ccnet-server-aarch64'])
print()
print(map['libsearpc'])
print(map['libsearpc-armv6h'])
print(map['libsearpc-armv7h'])
print(map['libsearpc-aarch64'])
print()
dep_order = toposort_flatten(shallow_map)
for name in dep_order:
if name in rmap:
deps = map[name]
dependers = rmap[name]
for dd in dependers:
map[dd].update(deps)
print(map['seafile'])
print(map['seafile-armv6h'])
print(map['seafile-armv7h'])
print(map['seafile-aarch64'])
print()
print(map['ccnet-server'])
print(map['ccnet-server-armv6h'])
print(map['ccnet-server-armv7h'])
print(map['ccnet-server-aarch64'])
print()
print(map['libsearpc'])
print(map['libsearpc-armv6h'])
print(map['libsearpc-armv7h'])
print(map['libsearpc-aarch64'])
print()
return map
{Dependency(pkgdir=PosixPath('/home/calil/arch4edu/arch4edu/libsearpc'), pkgname='libsearpc'), Dependency(pkgdir=PosixPath('/home/calil/arch4edu/arch4edu/ccnet-server'), pkgname='ccnet-server')}
{Dependency(pkgdir=PosixPath('/home/calil/arch4edu/arch4edu/ccnet-server-armv6h'), pkgname='ccnet-server'), Dependency(pkgdir=PosixPath('/home/calil/arch4edu/arch4edu/libsearpc-armv6h'), pkgname='libsearpc')}
{Dependency(pkgdir=PosixPath('/home/calil/arch4edu/arch4edu/libsearpc-armv7h'), pkgname='libsearpc'), Dependency(pkgdir=PosixPath('/home/calil/arch4edu/arch4edu/ccnet-server-armv7h'), pkgname='ccnet-server')}
{Dependency(pkgdir=PosixPath('/home/calil/arch4edu/arch4edu/libsearpc-aarch64'), pkgname='libsearpc'), Dependency(pkgdir=PosixPath('/home/calil/arch4edu/arch4edu/ccnet-server-aarch64'), pkgname='ccnet-server')}
{Dependency(pkgdir=PosixPath('/home/calil/arch4edu/arch4edu/libsearpc'), pkgname='libsearpc')}
{Dependency(pkgdir=PosixPath('/home/calil/arch4edu/arch4edu/libsearpc-armv6h'), pkgname='libsearpc')}
{Dependency(pkgdir=PosixPath('/home/calil/arch4edu/arch4edu/libsearpc-armv7h'), pkgname='libsearpc')}
{Dependency(pkgdir=PosixPath('/home/calil/arch4edu/arch4edu/libsearpc-aarch64'), pkgname='libsearpc')}
set()
set()
set()
set()
{Dependency(pkgdir=PosixPath('/home/calil/arch4edu/arch4edu/libsearpc'), pkgname='libsearpc'), Dependency(pkgdir=PosixPath('/home/calil/arch4edu/arch4edu/ccnet-server'), pkgname='ccnet-server')}
{Dependency(pkgdir=PosixPath('/home/calil/arch4edu/arch4edu/ccnet-server-armv6h'), pkgname='ccnet-server'), Dependency(pkgdir=PosixPath('/home/calil/arch4edu/arch4edu/libsearpc-armv6h'), pkgname='libsearpc'), Dependency(pkgdir=PosixPath('/home/calil/arch4edu/arch4edu/libsearpc'), pkgname='libsearpc')}
{Dependency(pkgdir=PosixPath('/home/calil/arch4edu/arch4edu/libsearpc-armv7h'), pkgname='libsearpc'), Dependency(pkgdir=PosixPath('/home/calil/arch4edu/arch4edu/libsearpc'), pkgname='libsearpc'), Dependency(pkgdir=PosixPath('/home/calil/arch4edu/arch4edu/ccnet-server-armv7h'), pkgname='ccnet-server')}
{Dependency(pkgdir=PosixPath('/home/calil/arch4edu/arch4edu/libsearpc-aarch64'), pkgname='libsearpc'), Dependency(pkgdir=PosixPath('/home/calil/arch4edu/arch4edu/libsearpc'), pkgname='libsearpc'), Dependency(pkgdir=PosixPath('/home/calil/arch4edu/arch4edu/ccnet-server-aarch64'), pkgname='ccnet-server')}
{Dependency(pkgdir=PosixPath('/home/calil/arch4edu/arch4edu/libsearpc'), pkgname='libsearpc')}
{Dependency(pkgdir=PosixPath('/home/calil/arch4edu/arch4edu/libsearpc-armv6h'), pkgname='libsearpc')}
{Dependency(pkgdir=PosixPath('/home/calil/arch4edu/arch4edu/libsearpc-armv7h'), pkgname='libsearpc')}
{Dependency(pkgdir=PosixPath('/home/calil/arch4edu/arch4edu/libsearpc-aarch64'), pkgname='libsearpc')}
set()
set()
set()
set()
在这个 case 上的确解决了问题。
这个我还不确定修的对不对。
目前是遇到了这么个问题。 在x86_64及ARM架构下,均有下述依赖关系的3个包
然而现在build seafile-armv6h的时候,会解析出(ccnet-server-armv6h, ccnet-server) (libsearpc-armv6h, libsearpc) (libsearpc, libsearpc) 三个依赖,其中最后一个为x86_64的
这么改了以后就只有前两个依赖了。