chiark / gitweb /
wip
[nailing-cargo.git] / fucking-cargo
1 #!/bin/bash
2 set -e
3
4 lock=${PWD%/*}/.fuck.lock
5 if [ "x$FUCKING_CARGO" != "x$lock" ]; then
6         FUCKING_CARGO=$lock \
7         exec with-lock-ex -w "$lock" "$0" "$@"
8 fi
9
10 exec 3<../Fuck
11 f=Cargo.toml
12
13 sed='
14 /^ *\[dependencies\]/,/^ \[/{
15 '
16
17 exec 4<../Fuck
18 while read <&4 what where; do
19         if [ "x$what" = x- ]; then continue; fi
20         qwhere="${where//\//\\/}"
21         sed+=' s/^'$what' *=.*/'$what' = { path = "..\/'"${qwhere}"'" }/;
22 '
23 done
24 sed+='}
25 '
26
27 exec 4<../Fuck
28 while read <&4 what where; do
29         wf=../$where/$f
30         rm -f $wf.fucking~
31         sed <$wf >$wf.fucking~ "$sed"
32 done
33
34 exec 4<../Fuck
35 while read <&4 what where; do
36         wf=../$where/$f
37         if ! test -e $wf.unfucked~; then
38                 ln $wf $wf.unfucked~
39         fi
40 done
41
42 trap '
43         set +e
44         while read <&3 what where; do
45                 wf=../$where/$f
46                 if test -e $wf.unfucked~; then
47                         rm -f $wf.fucked~
48                         ln $wf $wf.fucked~
49                         mv $wf.unfucked~ $wf.unfucked~
50                 fi
51         done
52 ' EXIT
53
54 exec 4<../Fuck
55 while read <&4 what where; do
56         wf=../$where/$f
57         rm $wf.fucked~
58         mv -f $wf.fucking~ $wf
59         echo >&2 Fucked $wf
60 done
61
62 "$@"