]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/commitdiff
* 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
                --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
        ./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:
        $(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 -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
        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 -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)
 }
 
        $(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.
 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/
 
 
 [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.
 
 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.
 
 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
 
 [[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="""
 """]]
 
 [[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
        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"]]
 """]]
 
 [[toggle id=tla text="TLA"]]
@@ -173,15 +149,6 @@ Finally, see [[Git_pitfalls]] if you experience problems.
        tla import
 """]]
 
        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
 [[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