diff options
-rw-r--r-- | IkiWiki/Rcs/bzr.pm | 45 | ||||
-rw-r--r-- | debian/changelog | 1 | ||||
-rw-r--r-- | doc/todo/rcs_updates_needed_for_rename_and_remove.mdwn | 4 | ||||
-rwxr-xr-x | t/bazaar.t | 28 |
4 files changed, 63 insertions, 15 deletions
diff --git a/IkiWiki/Rcs/bzr.pm b/IkiWiki/Rcs/bzr.pm index e414e85d2..30d37a647 100644 --- a/IkiWiki/Rcs/bzr.pm +++ b/IkiWiki/Rcs/bzr.pm @@ -53,18 +53,24 @@ sub rcs_prepedit ($) { #{{{ return ""; } #}}} -sub rcs_commit ($$$;$$) { #{{{ - my ($file, $message, $rcstoken, $user, $ipaddr) = @_; +sub bzr_author ($$) { #{{{ + my ($user, $ipaddr) = @_; if (defined $user) { - $user = possibly_foolish_untaint($user); + return possibly_foolish_untaint($user); } elsif (defined $ipaddr) { - $user = "Anonymous from ".possibly_foolish_untaint($ipaddr); + return "Anonymous from ".possibly_foolish_untaint($ipaddr); } else { - $user = "Anonymous"; + return "Anonymous"; } +} #}}} + +sub rcs_commit ($$$;$$) { #{{{ + my ($file, $message, $rcstoken, $user, $ipaddr) = @_; + + $user = bzr_author($user, $ipaddr); $message = possibly_foolish_untaint($message); if (! length $message) { @@ -84,9 +90,22 @@ sub rcs_commit_staged ($$$) { # Commits all staged changes. Changes can be staged using rcs_add, # rcs_remove, and rcs_rename. my ($message, $user, $ipaddr)=@_; - - error("rcs_commit_staged not implemented for bzr"); # TODO -} + + $user = bzr_author($user, $ipaddr); + + $message = possibly_foolish_untaint($message); + if (! length $message) { + $message = "no message given"; + } + + my @cmdline = ("bzr", "commit", "--quiet", "-m", $message, "--author", $user, + $config{srcdir}); + if (system(@cmdline) != 0) { + warn "'@cmdline' failed: $!"; + } + + return undef; # success +} #}}} sub rcs_add ($) { # {{{ my ($file) = @_; @@ -100,13 +119,19 @@ sub rcs_add ($) { # {{{ sub rcs_remove ($) { # {{{ my ($file) = @_; - error("rcs_remove not implemented for bzr"); # TODO + my @cmdline = ("bzr", "rm", "--force", "--quiet", "$config{srcdir}/$file"); + if (system(@cmdline) != 0) { + warn "'@cmdline' failed: $!"; + } } #}}} sub rcs_rename ($$) { # {{{ my ($src, $dest) = @_; - error("rcs_rename not implemented for bzr"); # TODO + my @cmdline = ("bzr", "mv", "--quiet", "$config{srcdir}/$src", "$config{srcdir}/$dest"); + if (system(@cmdline) != 0) { + warn "'@cmdline' failed: $!"; + } } #}}} sub rcs_recentchanges ($) { #{{{ diff --git a/debian/changelog b/debian/changelog index f6137d72f..7df588174 100644 --- a/debian/changelog +++ b/debian/changelog @@ -27,6 +27,7 @@ ikiwiki (2.55) UNRELEASED; urgency=low * Rebuild pages that change their type. (Gabriel McManus) * monotone: Add support for rename, delete, and also diff. (William Uther) * toggle: Fix incompatability between javascript and webkit. + * bzr: Add support for rename and delete. (Jelmer Vernooij) -- Joey Hess <joeyh@debian.org> Mon, 21 Jul 2008 11:35:46 -0400 diff --git a/doc/todo/rcs_updates_needed_for_rename_and_remove.mdwn b/doc/todo/rcs_updates_needed_for_rename_and_remove.mdwn index 412f94804..2af659c3b 100644 --- a/doc/todo/rcs_updates_needed_for_rename_and_remove.mdwn +++ b/doc/todo/rcs_updates_needed_for_rename_and_remove.mdwn @@ -1,5 +1,5 @@ I've added three new functions to the ikiwiki VCS interface to support -renaming and removing files using the web interface. The bzr, -mercurial, and tla [[rcs]] backends need implementions of these functions. +renaming and removing files using the web interface. The mercurial and +tla [[rcs]] backends need implementions of these functions. (The maintainers of these backends have been mailed. --[[Joey]]) diff --git a/t/bazaar.t b/t/bazaar.t index f064814fe..675a143b5 100755 --- a/t/bazaar.t +++ b/t/bazaar.t @@ -12,7 +12,7 @@ BEGIN { } } } -use Test::More tests => 11; +use Test::More tests => 16; BEGIN { use_ok("IkiWiki"); } @@ -44,8 +44,8 @@ my $message = "Added the second page"; my $test2 = readfile("t/test2.mdwn"); writefile('test2.mdwn', $config{srcdir}, $test2); -system "bzr add $config{srcdir}/test2.mdwn"; -system "bzr commit --author \"$user\" -m \"$message\" $config{srcdir}"; +system "bzr add --quiet $config{srcdir}/test2.mdwn"; +system "bzr commit --quiet --author \"$user\" -m \"$message\" $config{srcdir}"; @changes = IkiWiki::rcs_recentchanges(3); @@ -59,4 +59,26 @@ is($changes[1]{pages}[0]{"page"}, "test1.mdwn"); my $ctime = IkiWiki::rcs_getctime("test2.mdwn"); ok($ctime >= time() - 20); +writefile('test3.mdwn', $config{srcdir}, $test1); +IkiWiki::rcs_add("test3.mdwn"); +IkiWiki::rcs_rename("test3.mdwn", "test4.mdwn"); +IkiWiki::rcs_commit_staged("Added the 4th page", "moo", "Joe User"); + +@changes = IkiWiki::rcs_recentchanges(4); + +is($#changes, 2); +is($changes[0]{pages}[0]{"page"}, "test4.mdwn"); + +ok(mkdir($config{srcdir}."/newdir")); +IkiWiki::rcs_rename("test4.mdwn", "newdir/test5.mdwn"); +IkiWiki::rcs_commit_staged("Added the 5th page", "moo", "Joe User"); + +@changes = IkiWiki::rcs_recentchanges(4); + +is($#changes, 3); +is($changes[0]{pages}[0]{"page"}, "newdir/test5.mdwn"); + +IkiWiki::rcs_remove("newdir/test5.mdwn"); +IkiWiki::rcs_commit_staged("Remove the 5th page", "moo", "Joe User"); + system "rm -rf $dir"; |