#!/bin/sh set -e rcs="$1" srcdir="$2" repository="$3" usage () { echo "usage: ikiwiki-makerepo svn|git srcdir repository" >&2 echo " ikiwiki-makerepo bzr|mercurial srcdir" >&2 exit 1 } if [ -z "$rcs" ] || [ -z "$srcdir" ]; then usage fi if [ ! -d "$srcdir" ]; then echo "srcdir $srcdir not found" >&2 exit 1 fi if [ "$rcs" != mercurial ] && [ "$rcs" != bzr ]; then if [ -e "$repository" ]; then echo "repository $repository already exists, aborting" >&2 exit 1 fi repository="$(perl -e 'use Cwd q{abs_path}; $r=shift; $r=~s/\/*$//; print abs_path($r)' $repository)" if [ -z "$repository" ]; then echo "internal error finding repository abs_path" >&2 exit 1 fi fi echo "Importing $srcdir into $rcs" case "$rcs" in svn) if [ -e "$srcdir/.svn" ]; then echo "$srcdir already seems to be a svn working copy" >&2 exit 1 fi svnadmin create "$repository" svn mkdir "file://$repository/trunk" -m "create trunk directory" cd "$srcdir" svn co "file://$repository/trunk" . svn propset svn:ignore ".ikiwiki" . svn add * svn commit -m "initial import" echo "Directory $srcdir is now a checkout of $rcs repository $repository" ;; git) # There are better ways to do this, but this works with older # versions of git.) mkdir -p "$repository" (cd "$repository" && git --bare init --shared) cd "$srcdir" git init echo /.ikiwiki > .gitignore git add . git commit -m "initial commit" git remote add origin "$repository" git config branch.master.merge refs/heads/master git config branch.master.remote origin git push --all echo "Directory $srcdir is now a clone of $rcs repository $repository" ;; mercurial) hg init "$srcdir" cd "$srcdir" echo .ikiwiki > .hgignore hg add * .hgignore hg commit -m "initial import" echo "Directory $srcdir is now set up as a mercurial repository" ;; bzr) bzr init "$srcdir" cd "$srcdir" echo .ikiwiki > .bzrignore bzr add * .bzrignore bzr commit -m "initial import" echo "Directory $srcdir is now set up as a bzr repository" ;; *) echo "Unsupported revision control system $rcs" >&2 usage ;; esac