]> git.proxmox.com Git - rustc.git/blob - debian/prune-unused-deps
d/prune-unused-deps: handle cargo-as-workspace
[rustc.git] / debian / prune-unused-deps
1 #!/bin/bash
2 # Run this script in an unpacked upstream tarball directory, and it will update
3 # (i.e. overwrite) the "unused deps" part of Files-Excluded in d/copyright.
4
5 set -e
6
7 scriptdir=$(dirname "$(dirname "$(readlink -f "$0")")")
8 had_config_toml=$(if test -e "$scriptdir/debian/config.toml"; then echo true; else echo false; fi)
9
10 ( cd "$scriptdir" && debian/rules debian/config.toml )
11 cp "$scriptdir/debian/config.toml" config.toml
12
13 for i in "$scriptdir/debian/patches"/d-00*.patch; do
14 "$scriptdir/debian/ensure-patch" -N "$i"
15 done
16
17 test -f Cargo.lock.orig || cp Cargo.lock Cargo.lock.orig
18 test -f src/bootstrap/Cargo.lock.orig || cp src/bootstrap/Cargo.lock src/bootstrap/Cargo.lock.orig
19 test -f src/tools/rust-analyzer/Cargo.lock.orig || cp src/tools/rust-analyzer/Cargo.lock src/tools/rust-analyzer/Cargo.lock.orig
20 test -f src/tools/cargo/Cargo.lock.orig || cp src/tools/cargo/Cargo.lock src/tools/cargo/Cargo.lock.orig
21 rm -f Cargo.lock src/bootstrap/Cargo.lock src/tools/rust-analyzer/Cargo.lock src/tools/cargo/Cargo.lock
22
23 find vendor -name .cargo-checksum.json -execdir "$scriptdir/debian/prune-checksums" "{}" +
24
25 # re-generate Cargo.lock after patching
26 cargo update --offline
27
28 # re-generate src/bootstrap/Cargo.lock after patching
29 (cd src/bootstrap && cargo update --offline)
30
31 # re-generate src/tools/rust-analyzer/Cargo.lock after patching
32 ( cd src/tools/rust-analyzer && cargo update --offline )
33
34 # re-generate src/tools/cargo/Cargo.lock after patching
35 ( cd src/tools/cargo && cargo update --offline )
36
37 needed_crates() {
38 cat Cargo.lock \
39 src/bootstrap/Cargo.lock \
40 src/tools/rust-analyzer/Cargo.lock \
41 src/tools/cargo/Cargo.lock \
42 | sed -z -e 's/\nname = /name = /g' -e 's/\nversion = /version = /g' \
43 | sed -ne 's/\[\[package\]\]name = "\(.*\)"version = "\(.*\)"/\1 \2/gp'
44 }
45
46 ghetto_parse_cargo() {
47 cat "$1" \
48 | tr '\n' '\t' \
49 | sed -e 's/\t\[/\n[/g' \
50 | perl -ne 'print if s/^\[(?:package|project)\].*\tname\s*=\s*"(.*?)".*\tversion\s*=\s*"(.*?)".*/\1 \2/g'
51 }
52
53 pruned_paths() {
54 for i in vendor/*/Cargo.toml; do
55 pkgnamever=
56 pkgnamever=$(ghetto_parse_cargo "$i")
57 if [ -z "$pkgnamever" ]; then
58 echo >&2 "failed to parse: $i"
59 exit 1
60 fi
61 echo "$pkgnamever $i"
62 done | grep -v -F -f <(needed_crates) | cut '-d ' -f3 | while read x; do
63 echo " $(dirname $x)"
64 done
65 }
66
67 header='# DO NOT EDIT below, AUTOGENERATED'
68 footer='# DO NOT EDIT above, AUTOGENERATED'
69 {
70 echo "$header"
71 pruned_paths
72 echo "$footer"
73 } > $scriptdir/debian/copyright.unused-deps
74
75 cd $scriptdir/debian
76 sed -i -e "/^$header/,/^$footer/d" -e '/^# unused dependencies/rcopyright.unused-deps' copyright
77 rm copyright.unused-deps
78 $had_config_toml || rm "$scriptdir/debian/config.toml"