Bläddra i källkod

test2.sh分析列表

侠义书生 3 år sedan
förälder
incheckning
60027e5140
1 ändrade filer med 80 tillägg och 17 borttagningar
  1. 80 17
      debootstrap/apt_list/test2.sh

+ 80 - 17
debootstrap/apt_list/test2.sh

@@ -44,7 +44,8 @@ function t3() {
 
     analysis.sh --repo ${MIRROR} --prio required | awk '{print $1}' |
         xargs -i analysis.sh --repo ${MIRROR} --pkg {} |
-        grep -E "^Depends:|^Pre-Depends" | sed 's/^.*Depends://' | tr ',' '\n' | sed 's/|.*//' | sed 's#(.*)##g' | xargs | tr ' ' '\n' | sort | uniq
+        grep -E "^Depends:|^Pre-Depends" | sed 's/^.*Depends://' |
+        tr ',' '\n' | sed 's/|.*//' | sed 's#(.*)##g' | xargs | tr ' ' '\n' | sort | uniq >/var/tmp/newpkgs.txt1
 }
 
 # 查找单个包
@@ -54,6 +55,63 @@ function t4() {
         grep -E "^Depends:|^Pre-Depends" | sed 's/^.*Depends://' | tr ',' '\n' | sed 's/|.*//' | sed 's#(.*)##g' | xargs | tr ' ' '\n' | sort | uniq
 }
 
+pkgdetails_field() {
+    # uniq field mirror Packages values...
+    perl -le '
+$unique = shift @ARGV; $field = lc(shift @ARGV); $mirror = shift @ARGV;
+%fields = map { $_, 0 } @ARGV;
+$prevpkg = "";
+$chksumfield = lc($ENV{DEBOOTSTRAP_CHECKSUM_FIELD}).":";
+while (<STDIN>) {
+	if (/^([^:]*:)\s*(.*)$/) {
+		$f = lc($1); $v = $2;
+		if ($f eq "package:") {
+			$last = 0;
+			$pkg = $v;
+			if ($pkg ne $prevpkg) {
+				print $output if defined $output;
+				if ($unique && defined $output_val) {
+					delete $fields{$output_val};
+					$last = 1 unless keys %fields;
+				}
+				$prevpkg = $pkg;
+			}
+			undef $output;
+			undef $output_val;
+			last if $last;
+		}
+		$ver = $v if ($f eq "version:");
+		$arc = $v if ($f eq "architecture:");
+		$fil = $v if ($f eq "filename:");
+		$chk = $v if ($f eq $chksumfield);
+		$siz = $v if ($f eq "size:");
+		$val = $v if ($f eq $field);
+	} elsif (/^$/) {
+		if (defined $val && defined $fields{$val}) {
+			$output = sprintf "%s %s %s %s %s %s %s",
+			 $pkg, $ver, $arc, $mirror, $fil, $chk, $siz;
+			$output_val = $val;
+		}
+		undef $val;
+	}
+}
+print $output if defined $output;
+delete $fields{$output_val} if $unique && defined $output_val;
+for $v (keys %fields) {
+	printf ("%s -\n", $v) if ($unique);
+}
+' "$@"
+}
+
+without() {
+    # usage:  without "a b c" "a d" -> "b" "c"
+    (
+        echo "$1" | tr ' ' '\n' | sort | uniq
+        echo "$2" "$2" | tr ' ' '\n'
+    ) | sort | uniq -u | tr '\n' ' '
+    echo
+}
+
 resolve_deps() {
     MIRROR="/var/tmp/indices/172.29.220.242/mirror/kylin/dists"
 
@@ -70,35 +128,40 @@ resolve_deps() {
         #     done
         # done
 
-        for p in ${PKGS}; do
-            # echo ${p}
-            analysis.sh --repo ${MIRROR} --pkg ${p}
-        done | grep -E "^Depends:|^Pre-Depends" | sed 's/^.*Depends://' | tr ',' '\n' | sed 's/|.*//' | sed 's#(.*)##g' | xargs | tr ' ' '\n' | sort | uniq
-
-        # TMP=$(echo ${PKGS} | xargs -i analysis.sh --repo ${MIRROR} --pkg {} | grep -E "^Depends:|^Pre-Depends" | sed 's/^.*Depends://' | tr ',' '\n' | sed 's/|.*//' | sed 's#(.*)##g' | xargs | tr ' ' '\n' | sort | uniq)
-        # mylog2 "${TMP}"
-
-        exit
+        NEWPKGS=$(echo "${PKGS}" | xargs -i analysis.sh --repo ${MIRROR} --pkg {} |
+            grep -E "^Depends:|^Pre-Depends" | sed 's/^.*Depends://' |
+            tr ',' '\n' | sed 's/|.*//' | sed 's#(.*)##g' | xargs | tr ' ' '\n' | sort | uniq)
 
         mylog "newpkgs.txt2" "$(echo ${NEWPKGS} | xargs | tr ' ' '\n')"
+
         PKGS=$(echo "$PKGS $NEWPKGS" | tr ' ' '\n' | sort | uniq)
+
         local REALPKGS=""
-        for s in $SUITE $EXTRA_SUITES; do
-            for c in ${COMPONENTS:-$(echo ${USE_COMPONENTS} | tr '|' ' ')}; do
-                local path="dists/$s/$c/binary-$ARCH/Packages"
-                local pkgdest="${TARGET_DIR}/172.29.220.242/mirror/kylin/dists/v101/main/binary-amd64/Packages"
-                REALPKGS="$REALPKGS $(pkgdetails_perl PKGS REAL "$pkgdest" $PKGS | sed -n 's/ .*REAL.*$//p')"
-            done
-        done
+        # for s in $SUITE $EXTRA_SUITES; do
+        #     for c in ${COMPONENTS:-$(echo ${USE_COMPONENTS} | tr '|' ' ')}; do
+        #         local path="dists/$s/$c/binary-$ARCH/Packages"
+        #         local pkgdest="${TARGET_DIR}/172.29.220.242/mirror/kylin/dists/v101/main/binary-amd64/Packages"
+        #         REALPKGS="$REALPKGS $(pkgdetails_perl PKGS REAL "$pkgdest" $PKGS | sed -n 's/ .*REAL.*$//p')"
+        #     done
+        # done
+
+        p="${TARGET_DIR}/172.29.220.242/mirror/kylin/dists/v101/main/binary-amd64/Packages"
+        m="REAL"
+        REALPKGS="$REALPKGS $(LC_ALL=C egrep '^$|^Architecture:|^Filename:|^MD5sum:|^Package:|^Priority:|^SHA256:|^Size:|^Version:|^Depends:|^Pre-Depends:' "$p" |
+            pkgdetails_field 1 Package: "$m" $PKGS | sed -n 's/ .*REAL.*$//p')"
         mylog "realpkgs.txt2" "$(echo ${REALPKGS} | xargs | tr ' ' '\n')"
+
         PKGS="$REALPKGS"
         ALLPKGS2=$(echo "$PKGS $ALLPKGS" | tr ' ' '\n' | sort | uniq)
         PKGS=$(without "$ALLPKGS2" "$ALLPKGS")
+
         ALLPKGS="$ALLPKGS2"
     done
     echo "$ALLPKGS"
 }
 
+TARGET_DIR="/var/tmp/indices"
+
 SHELL_DIR=$(dirname $(readlink -f $0))
 
 PRIO="required"