#!/usr/bin/perl -w
# $Date: 2008/03/17 07:54:16 $

## switch between various queues for cvsq

use strict;

my $home=$ENV{'HOME'};
defined $home && -d $home
	or die "Invalid home directory.\n";

foreach my $dir (qw! .cvsq .cvsq-deferred-queues .cvsq-deferred-queues/queues !) {
     -d "$home/$dir" and next;
     mkdir "$home/$dir", 0700
         or die "Unable to create directory `$home/$dir' ($!)\n";
 }

-f "$home/.cvsq-deferred-queues/current" or do {
	open(CURRENT,"> $home/.cvsq-deferred-queues/current")
		or die "Cannot create $home/.cvsq-deferred-queues/current ($!)\n";
	print CURRENT "default";
	close(CURRENT)
		or die "Cannot close $home/.cvsq-deferred-queues/current ($!)\n";
};

open(CURRENT, "< $home/.cvsq-deferred-queues/current")
		or die "Cannot close $home/.cvsq-deferred-queues/current ($!)\n";
my $current = do {local $/; <CURRENT>};
close(CURRENT)
	or die "Cannot close $home/.cvsq-deferred-queues/current ($!)\n";

@ARGV < 2 or die "usage: $0 [queue-name]\n";

my $newqueue = $ARGV[0];

defined($newqueue) or $newqueue = "default";

print "old queue >$current<, new queue >$newqueue<\n";

$current eq $newqueue and do {
	print "Old and new queue coincide, so there's nothing to do.\n";
	exit(0);
};

my $qcurrent = quote($current);
my $qnew     = quote($newqueue);

-e "$home/.cvsq-deferred-queues/queues/$qcurrent" and 
	die "current queue is >$current<, but $home/.cvsq-deferred-queue/queues/$qcurrent exists!\n";

-d "$home/.cvsq-deferred-queues/queues/$qnew" or do {
	mkdir "$home/.cvsq-deferred-queues/queues/$qnew", 0700
		or die "Unable to create directory `$home/.cvsq-deferred-queues/queues/$qnew' ($!)\n";
};

rename "$home/.cvsq", "$home/.cvsq-deferred-queues/queues/$qcurrent"
	or die "Couldn't store the old queue ($!)\n";

rename "$home/.cvsq-deferred-queues/queues/$qnew", "$home/.cvsq"
	or die "Couldn't set up the new queue ($!)\n";

unlink "$home/.cvsq-deferred-queues/current" 
	or die "Couldn't remove the old queue name tag\n";

open(CURRENT,"> $home/.cvsq-deferred-queues/current")
	or die "Cannot create $home/.cvsq-deferred-queues/current ($!)\n";
print CURRENT $newqueue;
close(CURRENT)
	or die "Cannot close $home/.cvsq-deferred-queues/current ($!)\n";



sub quote
{
	my ($name) = @_;

	$name =~ s/([^-a-zA-Z0-9])/"_" . ord ($1) . "_" /eg;
	return $name;
}
