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         sed+=' s/^$what *=/$what = { path = ../'"${where//\//\\/}"' }
20 '
21 done
22 sed+='}
23 '
24
25 exec 4<../Fuck
26 while read <&4 what where; do
27         wf=../$where/$f
28         rm -f $wf.fucking~
29         sed <$wf >$wf.fucking~
30 done
31
32 exec 4<../Fuck
33 while read <&4 what where; do
34         wf=../$where/$f
35         if ! test -e $wf.unfucked~; then
36                 ln $wf $wf.unfucked~
37         fi
38 done
39
40 trap '
41         set +e
42         while read <&3 what where; do
43                 wf=../$where/$f
44                 if test -e $wf.unfucked~; then
45                         rm -f $wf.fucked~
46                         ln $wf $wf.fucked~
47                         mv $wf.unfucked~ $wf.unfucked~
48                 fi
49         done
50 ' EXIT
51
52 exec 4<../Fuck
53 while read <&4 what where; do
54         wf=../$where/$f
55         rm $wf.fucked~
56         mv -f $wf.fucking~ $wf
57 done
58
59 "$@"