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