chiark / gitweb /
wip
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 17 Feb 2019 23:39:39 +0000 (23:39 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 17 Feb 2019 23:39:39 +0000 (23:39 +0000)
fucking-cargo [new file with mode: 0755]

diff --git a/fucking-cargo b/fucking-cargo
new file mode 100755 (executable)
index 0000000..4984d74
--- /dev/null
@@ -0,0 +1,59 @@
+#!/bin/bash
+set -e
+
+lock=${PWD%/*}/.fuck.lock
+if [ "x$FUCKING_CARGO" != "x$lock" ]; then
+       FUCKING_CARGO=$lock \
+       exec with-lock-ex -w "$lock" "$0" "$@"
+fi
+
+exec 3<../Fuck
+f=Cargo.toml
+
+sed='
+/^ *\[dependencies\]/,/^ \[/{
+'
+
+exec 4<../Fuck
+while read <&4 what where; do
+       sed+=' s/^$what *=/$what = { path = ../'"${where//\//\\/}"' }
+'
+done
+sed+='}
+'
+
+exec 4<../Fuck
+while read <&4 what where; do
+       wf=../$where/$f
+       rm -f $wf.fucking~
+       sed <$wf >$wf.fucking~
+done
+
+exec 4<../Fuck
+while read <&4 what where; do
+       wf=../$where/$f
+       if ! test -e $wf.unfucked~; then
+               ln $wf $wf.unfucked~
+       fi
+done
+
+trap '
+       set +e
+       while read <&3 what where; do
+               wf=../$where/$f
+               if test -e $wf.unfucked~; then
+                       rm -f $wf.fucked~
+                       ln $wf $wf.fucked~
+                       mv $wf.unfucked~ $wf.unfucked~
+               fi
+       done
+' EXIT
+
+exec 4<../Fuck
+while read <&4 what where; do
+       wf=../$where/$f
+       rm $wf.fucked~
+       mv -f $wf.fucking~ $wf
+done
+
+"$@"