From: Joey Hess Date: Tue, 27 Nov 2007 05:34:17 +0000 (-0500) Subject: * Add a new ikiwiki-makerepo program, that automates setting up a repo X-Git-Url: https://sipb.mit.edu/gitweb.cgi/ikiwiki.git/commitdiff_plain/491847ed5311123b3ce58c636451c56a2a0f191b * 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. --- diff --git a/Makefile.PL b/Makefile.PL index d40cf3d56..cd9683d27 100755 --- a/Makefile.PL +++ b/Makefile.PL @@ -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) } diff --git a/debian/changelog b/debian/changelog index 299d7d571..2a9aae3ab 100644 --- a/debian/changelog +++ b/debian/changelog @@ -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 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 index 000000000..19f891d0e --- /dev/null +++ b/doc/ikiwiki-makerepo.mdwn @@ -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 + +Warning: this page is automatically made into ikiwiki-makerepo's man page, edit with care diff --git a/doc/rcs/git.mdwn b/doc/rcs/git.mdwn index 55e2f1d55..504ded17a 100644 --- a/doc/rcs/git.mdwn +++ b/doc/rcs/git.mdwn @@ -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. diff --git a/doc/setup.mdwn b/doc/setup.mdwn index 213146a7a..7e8973bbc 100644 --- a/doc/setup.mdwn +++ b/doc/setup.mdwn @@ -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 index c3584775b..000000000 --- a/doc/setup/git_pitfalls.mdwn +++ /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 index 000000000..a6999cb4a --- /dev/null +++ b/ikiwiki-makerepo @@ -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