From 63ea9cdc9c8116c20bc1c5de72bb7701faa2acfc Mon Sep 17 00:00:00 2001
From: tv <tv@also>
Date: Sat, 6 Aug 2011 00:56:37 +0200
Subject: assimilator: add git-clone-into

---
 assimilator/bin/git-clone-into | 48 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 48 insertions(+)
 create mode 100755 assimilator/bin/git-clone-into

(limited to 'assimilator')

diff --git a/assimilator/bin/git-clone-into b/assimilator/bin/git-clone-into
new file mode 100755
index 00000000..67e820e6
--- /dev/null
+++ b/assimilator/bin/git-clone-into
@@ -0,0 +1,48 @@
+#! /bin/sh
+#
+# usage: git-clone-into repository directory
+#
+set -euf
+
+tempdir() {
+  set -- `tempnam $1`
+  mkdir $1
+  echo $1
+}
+
+## [prefix] -> tempnam
+tempnam() {
+  until set -- $1 ${1-}`candnam` && ! test -e $2; do :; done
+  echo $2
+}
+
+candnam() {
+  uuidgen 2>/dev/null || date +%s%N
+}
+
+
+
+  tmp_remote=`candnam`
+  tmp_branch=`candnam`
+
+  subdir=$2
+  if test -e $subdir; then
+    echo 'You are made of stupid!' >&2
+    exit 23
+  fi
+  tmpdir=`tempdir /tmp/tempdir-`
+  #trap "test -d $tmpdir && rm -vfR $tmpdir" EXIT
+  trap "test -d $tmpdir && rm -fR $tmpdir" EXIT
+  repository="${1-$repository}"
+  git clone "$repository" $tmpdir
+  (cd $tmpdir
+  subdir="$subdir" git filter-branch --tree-filter '
+    if ! test -d $subdir; then
+      mkdir -p $subdir
+      git ls-tree -z --name-only $GIT_COMMIT | xargs -I. --null mv . $subdir
+    fi
+  '
+  git checkout -b $tmp_branch)
+  git remote add $tmp_remote $tmpdir
+  git fetch $tmp_remote
+  git merge $tmp_remote/$tmp_branch # TODO configurable branch
-- 
cgit v1.2.3