5

このファイルを使用して、単一の基本パッケージを指定して、パッケージの依存関係のツリーを出力したいと思います。たとえば、Bash パッケージを使用します。

@ bash
# few lines removed
requires: coreutils libintl8 libncursesw10 libreadline7 _update-info-dir cygwin

必要なパッケージの検索のような出力が欲しい、部分的な例

bash
bash coreutils
bash coreutils libattr1
bash coreutils libattr1 libintl8
bash coreutils libattr1 libintl8 libiconv2
bash coreutils libattr1 libintl8 _autorebase
bash coreutils libattr1 libintl8 _autorebase rebase
bash coreutils libattr1 libintl8 _autorebase rebase dash
bash coreutils libattr1 libintl8 _autorebase rebase dash cygwin
bash coreutils libattr1 libintl8 _autorebase rebase dash cygwin base-cygwin

私はこのコマンドを持っていますが、再帰しません

#!awk -f
$1 == "@" {
  pkg = $2
}
$1 == "requires:" {
  for (i=2; i<=NF; i++)
    reqs[pkg][i-1] = $i
}
END {
  query = "bash"
  for (pkg in reqs[query]) {
    print reqs[query][pkg]
  }
}
4

3 に答える 3

0
#!/usr/bin/awk -f
@include "join"
$1 == "@" {
  apg = $2
}
$1 == "requires:" {
  for (z=2; z<=NF; z++)
    reqs[apg][z-1] = $z
}
END {
  prpg("bash")
}
function smartmatch(small, large,    values) {
  for (each in large)
    values[large[each]]
  return small in values
}
function prpg(fpg) {
  if (smartmatch(fpg, spath)) return
  spath[length(spath)+1] = fpg
  print join(spath, 1, length(spath))
  if (isarray(reqs[fpg]))
    for (each in reqs[fpg])
      prpg(reqs[fpg][each])
  delete spath[length(spath)]
}

ソース

于 2014-11-11T09:29:51.780 に答える