--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/CopyRel.pm Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,179 @@
+#!perl
+# Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+#
+# Description:
+# CopyRelease - contains fuctions to copy a release in an archive
+#
+
+package CopyRel;
+
+use strict;
+use RelData;
+use PushPullRel;
+
+BEGIN {
+ @CopyRel::ISA=('PushPullRel');
+};
+
+sub new {
+ my $class = shift;
+ my $inidata = shift;
+ my $force = shift;
+ my $verbose = shift;
+ my $project = shift;
+
+ my $self = bless {}, (ref $class || $class);
+
+ $self->{iniData} = $inidata;
+ $self->{force} = $force;
+ $self->{verbose} = $verbose;
+ $self->{project} = $project;
+ $self->{errors} = [];
+
+ return $self;
+}
+
+sub CopyRelease {
+ my $self = shift;
+ my $component = shift;
+ my $versionToCopy = shift;
+ my $version = shift;
+ my $internalVersion = shift;
+
+ my $releaseDir = $self->ObtainReleaseDir($component, $versionToCopy);
+ my $releaseCopyDir;
+
+ # Obtain the release copy directory
+ if(defined $self->{project}){
+ $releaseCopyDir = $self->{iniData}->PathData->LocalArchivePathForNewComponent($component, $version, $self->{project});
+ }
+ else{
+ $releaseCopyDir = $releaseDir;
+ $releaseCopyDir =~ s/$versionToCopy$/$version/;
+ }
+
+ eval {
+
+ # Preform the copying of files
+ $self->PerformCopying($component, $versionToCopy, $releaseCopyDir, $releaseDir);
+
+ if($versionToCopy !~ /^$version$/i || $versionToCopy !~ /^$internalVersion$/i){
+ # Update the reldata so that the release number is correct...
+ $self->UpdateRelData($component, $version, $internalVersion);
+ }
+ };
+
+ if ($@) {
+ print "$@";
+ $self->_AddError($@);
+ }
+}
+
+sub UpdateRelData {
+ my $self = shift;
+ my $component = shift;
+ my $version = shift;
+ my $internalVersion = shift;
+
+ my $reldata;
+
+ if (!($reldata = RelData->Open($self->{iniData}, $component, $version, 0))) {
+ die "ERROR: Couldn't open version '$version' of '$component'";
+ }
+
+ $reldata->UpdateProject($self->{project});
+ $reldata->UpdateInternalVersion("$internalVersion");
+
+ my $env = $reldata->Environment;
+
+ foreach my $thisComp (sort keys %{$env}) {
+
+ if($thisComp =~ /$component/i) {
+ $env->{$thisComp} = $version;
+ }
+ }
+
+ $reldata->UpdateEnv($env);
+}
+
+sub ObtainReleaseDir {
+ my $self = shift;
+ my $component = shift;
+ my $version = shift;
+
+ my $releaseDir;
+
+ if (!($releaseDir = $self->{iniData}->PathData->LocalArchivePathForExistingComponent($component, $version))) {
+ die "ERROR: Couldn't locate component '$component' at version '$version'";
+ }
+
+ return $releaseDir;
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+CopyRel.pm - Class for copying a release version.
+
+=head1 DESCRIPTION
+
+Provides an API to create a new release version which is a copy of an another release. This class extends the methods provide by PushPullRel.pm to enable the copying of a release version.
+
+=head1 INTERFACE
+
+=head2 New
+
+Creates a new object of this class. Takes four parameters. 1) An IniData object corresponding
+to your local repository. 2) Force (overwrites). 3) Verbose. 4) Project name to uses, which is associated to archive paths as set the reltools.ini.
+
+=head2 CopyRelease
+
+Takes component name, verson to copy, new version and new internal version. Is used to initiate the copying of a release.
+
+=head2 UpdateRelData
+
+Takes component name, version and internal version. Is used to update the reldata of a newly copied release so that the release version information is correct in the reldata file.
+
+=head2 ObtainReleaseDir
+
+Takes component name and version. Is used to get the release dir using the component name and version as input.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+
+ Contributors:
+
+ Description:
+
+
+=cut
+