#!/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 $/; }; 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; }