* Add a new ikiwiki-makerepo program, that automates setting up a repo
authorJoey Hess <joey@kitenet.net>
Tue, 27 Nov 2007 05:34:17 +0000 (00:34 -0500)
committerJoey Hess <joey@kitenet.net>
Tue, 27 Nov 2007 05:34:17 +0000 (00:34 -0500)
    and importing existing content for svn, git, and mercurial. This makes
    the setup process much simpler.
  * Reorganised git documentation.
  * Actually install the ikiwiki-update-wikilist program.

Makefile.PL
debian/changelog
doc/ikiwiki-makerepo.mdwn [new file with mode: 0644]
doc/rcs/git.mdwn
doc/setup.mdwn
doc/setup/git_pitfalls.mdwn [deleted file]
ikiwiki-makerepo [new file with mode: 0755]

index d40cf3d56976fa386d45086324b06056b375765d..cd9683d279ed241a82ddc4eef1e0d2a8a1a37969 100755 (executable)
@@ -39,13 +39,14 @@ extra_build: ikiwiki.out
                --plugin=haiku --plugin=polygen --plugin=fortune
        ./mdwn2man ikiwiki 1 doc/usage.mdwn > ikiwiki.man
        ./mdwn2man ikiwiki-mass-rebuild 8 doc/ikiwiki-mass-rebuild.mdwn > ikiwiki-mass-rebuild.man
+       ./mdwn2man ikiwiki-makerepo 1 doc/ikiwiki-makerepo.mdwn > ikiwiki-makerepo.man
        ./mdwn2man ikiwiki-update-wikilist 1 doc/ikiwiki-update-wikilist.mdwn > ikiwiki-update-wikilist.man
        $(MAKE) -C po
        if [ "$$PROFILE" = 1 ]; then dprofpp; fi
 
 extra_clean:
        rm -rf html doc/.ikiwiki
-       rm -f ikiwiki.man ikiwiki-mass-rebuild.man ikiwiki-update-wikilist.man ikiwiki.out
+       rm -f *.man ikiwiki.out
        $(MAKE) -C po clean
 
 extra_install:
@@ -70,6 +71,7 @@ extra_install:
 
        install -d $(DESTDIR)$(PREFIX)/share/man/man1
        install -m 644 ikiwiki.man $(DESTDIR)$(PREFIX)/share/man/man1/ikiwiki.1
+       install -m 644 ikiwiki-makerepo.man $(DESTDIR)$(PREFIX)/share/man/man1/ikiwiki-makerepo.1
        install -m 644 ikiwiki-update-wikilist.man $(DESTDIR)$(PREFIX)/share/man/man1/ikiwiki-update-wikilist.1
        
        install -d $(DESTDIR)$(PREFIX)/share/man/man8
@@ -83,6 +85,7 @@ extra_install:
 
        install -d $(DESTDIR)$(PREFIX)/bin
        install ikiwiki.out $(DESTDIR)$(PREFIX)/bin/ikiwiki
+       install ikiwiki-makerepo ikiwiki-update-wikilist $(DESTDIR)$(PREFIX)/bin/
 
        $(MAKE) -C po install DESTDIR=$(DESTDIR) PREFIX=$(PREFIX)
 }
index 299d7d571bc87fb58de35cf79996ca5fceae4570..2a9aae3ab6f4e99d8070adcc6217e59259877ac9 100644 (file)
@@ -1,3 +1,13 @@
+ikiwiki (2.15) UNRELEASED; urgency=low
+
+  * Add a new ikiwiki-makerepo program, that automates setting up a repo
+    and importing existing content for svn, git, and mercurial. This makes
+    the setup process much simpler.
+  * Reorganised git documentation.
+  * Actually install the ikiwiki-update-wikilist program.
+
+ -- Joey Hess <joeyh@debian.org>  Tue, 27 Nov 2007 00:16:40 -0500
+
 ikiwiki (2.14) unstable; urgency=high
 
   * Let CC be used to control what compiler is used to build wrappers.
diff --git a/doc/ikiwiki-makerepo.mdwn b/doc/ikiwiki-makerepo.mdwn
new file mode 100644 (file)
index 0000000..19f891d
--- /dev/null
@@ -0,0 +1,23 @@
+# NAME
+
+ikiwiki-makerepo - check an ikiwiki srcdir into revision control
+
+# SYNOPSIS
+
+ikiwiki-makerepo svn|git srcdir repository
+ikiwiki-makerepo mercurial srcdir
+
+# DESCRIPTION
+
+`ikiwiki-makerepo` injects a `srcdir` directory, containing an ikiwiki wiki,
+into a `repository` that it creates. The repository can be a svn, git, or
+mercurial repository.
+
+Note that for mercurial, the srcdir is converted into a mercurial
+repository. There is no need to have a separate repository with mercurial.
+
+# AUTHOR
+
+Joey Hess <joey@ikiwiki.info>
+
+Warning: this page is automatically made into ikiwiki-makerepo's man page, edit with care
index 55e2f1d556e06c3923c74fe1f3b5e5a5a3506223..504ded17ae31e8479d203cbaef1bd8452dff1381 100644 (file)
@@ -5,13 +5,26 @@ the Linux kernel. Ikiwiki supports storing a wiki in git.
 
 [git]: http://git.or.cz/
 
-Ikiwiki can run as a post-update hook to update a wiki whenever commits
+Ikiwiki can run as a `post-update` hook to update a wiki whenever commits
 come in. When running as a [[cgi]] with Git, ikiwiki automatically
 commits edited pages, and uses the Git history to generate the
 [[RecentChanges]] page.
 
-[[Setup]] documents current best practice for using git with ikiwiki. This
-involves setting up a pair of git repositories. This method isn't the most
-obvious, but it works the best.
+## git repository setup
 
-See also: [[common_git_pitfalls|/setup/git_pitfalls]]
+When using Git, you probably want to set up two repositories, of which
+one should be bare (meaning that it does not have a working tree
+checked out), and the other one with a working tree will be used as
+ikiwiki's srcdir for compiling the wiki. [[ikiwiki-makerepo]] can automate
+setting this up. Using a pair of repositories isn't the most obvious set up,
+but it works the best for typical ikiwiki use.
+[[tips/Laptop_wiki_with_git]] describes a different way to set up ikiwiki
+and git.
+
+It is **paramount** that you **never** push to the non-bare repository
+([this FAQ entry explains why](http://git.or.cz/gitwiki/GitFaq#head-b6a3d85f677763313159eb39f7dbf4579d4ee28b)).
+Instead, if you want to work on the wiki from a remote machine, clone
+the bare repository, using either the `git` transport (if available), or
+`ssh`.
+
+The ikiwiki `post-commit` hook should be put in the bare repository.
index 213146a7a72227d827f14847a213f3ceefbaa0c2..7e8973bbc1a519c208a5862d241badefbfdf7218 100644 (file)
@@ -107,56 +107,32 @@ At this point you might want to check your wiki in to a revision control
 system so you can keep track of changes and revert edits. Depending
 on the revision control system you choose, the way this is done varies.
 
-There's little that's ikiwiki specific about these instructions; this is
-just how you put a directory under revision control using the various
-systems that ikiwiki supports. Note that the .ikiwiki subdirectory is
-where ikiwiki keeps its state, and should be preserved, but not checked
-into revision control.
+Note that the .ikiwiki subdirectory is where ikiwiki keeps its state, and
+should be preserved, but not checked into revision control.
+
+The new [[ikiwiki-makerepo]] command automates setting up a wiki in
+revision control.
 
 [[toggle id=subversion text="Subversion"]]
 [[toggleable id=subversion text="""
        REPOSITORY=~/wikirepo
-       svnadmin create $REPOSITORY
-       svn mkdir file://$REPOSITORY/trunk -m "create trunk"
-       cd $SRCDIR
-       svn co file://$REPOSITORY/trunk .
-       svn add *
-       svn commit -m "initial import"
+       ikiwiki-makerepo svn $SRCDIR $REPOSITORY
 """]]
 
 [[toggle id=git text="Git"]]
 [[toggleable id=git text="""
-When using Git, you probably want to set up two repositories, of which
-one should be bare (meaning that it does not have a working tree
-checked out). We call the bare repository the "repository" and the
-other will be the "srcdir" (which `ikiwiki` uses to compile the wiki).
-There are [other
-ways](http://blog.madduck.net/vcs/2007.07.11_publishing-git-repositories)
-to do the following, but this might be easiest:
-
        REPOSITORY=~/wiki.git
-       GIT_DIR=$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 push --all
-
-It is **paramount** that you **never** push to the Git repository in
-`$SRCDIR` ([this FAQ entry explains
-why](http://git.or.cz/gitwiki/GitFaq#head-b6a3d85f677763313159eb39f7dbf4579d4ee28b)).
-Instead, if you want to work on the wiki from a remote machine, clone
-`$REPOSITORY`, using either the `git` transport (if available), or
-`ssh`.
-
-If at any point you commit changes in `$SRCDIR`, make sure to `git
-push` them to the `$REPOSITORY`. ikiwiki will do this automatically
-for any changes made via the web.
-
-Finally, see [[Git_pitfalls]] if you experience problems.
+       ikiwiki-makerepo git $SRCDIR $REPOSITORY
+
+       Please see [[rcs/git]] for detailed documentation about how
+       ikiwiki uses git repositories, and some important caveats
+       about using the git repositories.
+"""]]
+
+[[toggle id=mercurial text="Mercurial"]]
+[[toggleable id=mercurial text="""
+       REPOSITORY=$SRCDIR
+       ikiwiki-makerepo mercurial $SRCDIR
 """]]
 
 [[toggle id=tla text="TLA"]]
@@ -173,15 +149,6 @@ Finally, see [[Git_pitfalls]] if you experience problems.
        tla import
 """]]
 
-[[toggle id=mercurial text="Mercurial"]]
-[[toggleable id=mercurial text="""
-       REPOSITORY=$SRCDIR
-       hg init $REPOSITORY
-       cd $REPOSITORY
-       hg add *
-       hg commit -m "initial import"
-"""]]
-
 [[toggle id=monotone text="Monotone"]]
 [[toggleable id=monotone text="""
        # These instructions are standard instructions to import a directory into monotone
diff --git a/doc/setup/git_pitfalls.mdwn b/doc/setup/git_pitfalls.mdwn
deleted file mode 100644 (file)
index c358477..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-I want to collect common problems and their solutions when using Ikiwiki with Git here. Nothing here yet though, so feel free to add...
-
-> Well, I have a question. :-)
-> 
-> If I follow the instructions, I get a bare $REPOSITORY and a $SRCDIR that
-> is cloned off of it. Web edits change the SRCDIR and ikiwiki automatically
-> pushes to origin, which updates REPOSITORY. But the instructions say not
-> to clone from SRCDIR; so I clone from REPOSITORY. Now if I manually edit
-> a file and push the commit, it goes to REPOSITORY. The wiki isn't
-> updated.
-> 
-> Seems like REPOSITORY needs a post-receive hook that cd's to SRCDIR and
-> does a git pull, and manually triggers ikiwiki. Which seems very messy.
->
-> Am I doing something wrong? --[[Joey]]
-> 
-> Hmm, perhaps I installed the wrapper to the wrong place? I had thought
-> it would go in $SRCDIR/.git/hooks/post-commit, but on second read, I see
-> that [[setup]] says it should be $REPOSITORY/hooks/post-update
-> 
-> That seems to have sorted it. Based on [[this|rcs/git/discussion]], I'm
-> not the only one to trip over how to do this. --[[Joey]]
diff --git a/ikiwiki-makerepo b/ikiwiki-makerepo
new file mode 100755 (executable)
index 0000000..a6999cb
--- /dev/null
@@ -0,0 +1,76 @@
+#!/bin/sh
+set -e
+
+rcs="$1"
+srcdir="$2"
+repository="$3"
+       
+usage () {
+       echo "usage: ikiwiki-makerepo svn|git srcdir repository" >&2
+       echo "       ikiwiki-makerepo 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 ]; then
+       if [ -e "$repository" ]; then
+               echo "repository $repository already exists, aborting" >&2 
+               exit 1
+       fi
+       repository="$(perl -e 'use Cwd q{abs_path}; print abs_path(shift)' $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)
+       GIT_DIR="$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 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"
+;;
+*)
+       echo "Unsupported revision control system $rcs" >&2
+       usage
+;;
+esac