summaryrefslogtreecommitdiff
path: root/src/mozclient/lib/MozClient/CVS.pm
diff options
context:
space:
mode:
Diffstat (limited to 'src/mozclient/lib/MozClient/CVS.pm')
-rw-r--r--src/mozclient/lib/MozClient/CVS.pm144
1 files changed, 144 insertions, 0 deletions
diff --git a/src/mozclient/lib/MozClient/CVS.pm b/src/mozclient/lib/MozClient/CVS.pm
new file mode 100644
index 0000000..7c946a3
--- /dev/null
+++ b/src/mozclient/lib/MozClient/CVS.pm
@@ -0,0 +1,144 @@
+# -*- mode: Perl -*-
+
+# Copyright (c) 2007-2008 Fabien Tassin <fta@sofaraway.org>
+# Description: MozClient::CVS
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2, or (at
+# your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+############################################################################
+
+package MozClient::CVS;
+
+use vars qw(@ISA);
+use strict;
+use MozClient::VCS;
+
+@ISA = ("MozClient::VCS");
+
+# Return the list of TAGs known by the VCS for MOZCLIENT_FILE
+sub list_tags {
+ my $self = shift;
+
+ $self->LOG("MozClient::CVS::list_tags()");
+ $self->chdir($self->work_dir);
+ $self->run_system("cvs -d " . $self->{'MOZCLIENT_CVS_LOC'} . " co " .
+ (join ' ', @{$self->{'MOZCLIENT_FILE'}}));
+ my $file = ${$self->{'MOZCLIENT_FILE'}}[0];
+ $file =~ s,^([^/]*)/,,;
+ $self->chdir("$1");
+ $self->run_system("cvs status -v $file");
+ $self->chdir("../..");
+}
+
+sub do_dynamic_tag {
+ my $self = shift;
+
+ $self->LOG("MozClient::CVS::do_dynamic_tag()");
+ # We want a dynamic TAG. Fetch files listed in MOZCLIENT_DYNTAG_FILES, then
+ # apply MOZCLIENT_DYNTAG rule to set $want_tag
+ die "Error: Missing MOZCLIENT_DYNTAG_FILES\n"
+ unless defined $self->{'MOZCLIENT_DYNTAG_FILES'};
+ $self->chdir($self->work_dir);
+ my $date = "";
+ $date = '-D "' . $self->convert_revdate($self->{'have_date'}) . '"'
+ if defined $self->{'have_date'};
+ undef $self->{'have_date'};
+ my $cmd = sprintf "cvs -d %s co %s", $self->{'MOZCLIENT_CVS_LOC'},
+ $self->{'MOZCLIENT_DYNTAG_FILES'};
+ $self->run_system($cmd);
+ chomp($self->{'want_tag'} = `$self->{'MOZCLIENT_DYNTAG'}`);
+ $self->LOG2("\$ want_tag=`" . $self->{'MOZCLIENT_DYNTAG'} . "` # => " .
+ $self->{'want_tag'});
+ $self->chdir("..");
+}
+
+sub get_client {
+ my $self = shift;
+
+ $self->LOG("MozClient::CVS::get_client()");
+ my $tbranch = defined $self->{'want_branch'} ?
+ "-r " . $self->{'want_branch'} : "";
+
+ $self->chdir($self->work_dir);
+ my $cmd = sprintf "cvs -d %s co %s %s %s %s", $self->{'MOZCLIENT_CVS_LOC'},
+ $tbranch, $self->{'mozclient_date'}, $self->{'co_tag'},
+ $self->{'MOZILLA_CLIENT'};
+ $self->run_system($cmd);
+ $self->chdir("..");
+
+ if (defined $self->{'MOZCLIENT_WANTPATCH'} &&
+ $self->{'MOZCLIENT_WANTPATCH'}) {
+ my $cmd = sprintf "ln -s %s %s/patches", $self->{'MOZCLIENT_PATCHES'},
+ $self->work_dir;
+ $self->run_system($cmd);
+ $self->chdir($self->work_dir);
+ $self->run_system("quilt --quiltrc /dev/null push -a");
+ $self->chdir("..");
+ }
+}
+
+sub convert_revdate {
+ my $self = shift;
+ my $arg = shift;
+
+ $self->LOG("MozClient::CVS::convert_revdate($arg)");
+ $arg =~ s,(....)(..)(..)[rt](..)(..),$1/$2/$3 $4:$5 PST,;
+ $arg;
+}
+
+sub set_revdate {
+ my $self = shift;
+
+ $self->LOG("MozClient::CVS::set_revdate()");
+
+ # We can set a date for CVS
+ if (defined $self->{'MOZCLIENT_PROJECT'}) {
+ $self->{'mozclient_date'} =
+ 'MOZ_CO_DATE="' . $self->convert_revdate($self->{'have_date'}) . '"';
+ }
+ else {
+ $self->{'mozclient_date'} =
+ '-D "' . $self->convert_revdate($self->{'have_date'}) . '"';
+ }
+}
+
+sub checkout {
+ my $self = shift;
+
+ $self->LOG("MozClient:CVS::checkout:()");
+ $self->chdir($self->work_dir);
+ if (defined $self->{'MOZCLIENT_PROJECT'}) {
+ my $cmd = sprintf "make -f %s checkout MOZ_CO_PROJECT=%s %s %s",
+ $self->{'MOZILLA_CLIENT'}, $self->{'MOZCLIENT_PROJECT'},
+ $self->{'mozclient_date'}, $self->{'moz_co_tag'};
+ $self->run_system($cmd);
+ }
+ else {
+ my $cmd = sprintf "cvs -d %s -q -z 3 co -P -A %s %s %s",
+ $self->{'MOZCLIENT_CVS_LOC'}, $self->{'mozclient_date'},
+ $self->{'co_tag'}, $self->{'MOZCLIENT_MODULES'};
+ $self->run_system($cmd);
+ }
+ $self->chdir("..");
+}
+
+sub tar_exclude {
+ my $self = shift;
+
+ $self->LOG("MozClient::CVS::tar_exclude()");
+ [ '--exclude CVS', '--exclude .cvsignore' ];
+}
+
+1;