From e7e84b0959526f4f39d409583932cd5f2b6163b1 Mon Sep 17 00:00:00 2001 From: Oliver Tappe Date: Wed, 14 Mar 2007 21:09:26 +0000 Subject: * added two checks around cloning in order to protect users from making bad mistakes * removed special-casing of clones, they no longer get a special name generated automatically, you have to specify the vendor-OS name and that's what you get. git-svn-id: http://svn.openslx.org/svn/openslx/trunk@771 95ad53e4-c205-0410-b2fa-d234c58c8868 --- installer/OpenSLX/OSSetup/Engine.pm | 48 ++++++++++++++++++++++++------------- installer/slxos-setup | 5 ++-- 2 files changed, 35 insertions(+), 18 deletions(-) diff --git a/installer/OpenSLX/OSSetup/Engine.pm b/installer/OpenSLX/OSSetup/Engine.pm index d79be75e..b07334de 100644 --- a/installer/OpenSLX/OSSetup/Engine.pm +++ b/installer/OpenSLX/OSSetup/Engine.pm @@ -85,13 +85,8 @@ sub initialize $self->{'vendor-os-name'} = $vendorOSName; $self->{'action-type'} = $actionType; my $distroName = $1; + my $selectionName = $2 || 'default'; $self->{'distro-name'} = $distroName; - my $selectionName = $2; - if (!length($selectionName) && $actionType ne 'clone') { - # selections for clones default to the name of the source, but - # that isn't known here, so we handle that in cloneVendorOS() - $selectionName = 'default'; - } $self->{'selection-name'} = $selectionName; if (!exists $supportedDistros{lc($distroName)}) { print _tr("Sorry, distro '%s' is unsupported.\n", $distroName); @@ -189,19 +184,40 @@ sub cloneVendorOS my $self = shift; my $source = shift; - $self->createVendorOSPath(); - - if (!length($self->{'selection-name'})) { - my $selectionName = "cloned-from-$source"; - $selectionName =~ tr[:/][_]; - # mask : and / - $selectionName =~ s[_+$][]; - # remove any trailing underscores, as they're ugly - $self->{'selection-name'} = $selectionName; - $self->{'vendor-os-name'} .= "-$selectionName"; + my $lastCloneSource; + my $cloneInfoFile = "$self->{'vendor-os-path'}/.openslx-clone-info"; + if (-e $self->{'vendor-os-path'}) { + if (!-e $cloneInfoFile) { + # oops, given vendor-os has not been cloned originally, we complain: + die _tr("The vendor-OS '%s' exists but it is no clone, refusing to clobber!\nPlease delete the folder manually, if that's really what you want...\n", + $self->{'vendor-os-path'}); + } else { + my $cloneInfo = slurpFile($cloneInfoFile); + if ($cloneInfo =~ m[^source\s*=\s*(.+?)\s*$]ims) { + $lastCloneSource = $1; + } + if ($source ne $lastCloneSource) { + # protect user from confusing sources (still allowed, though): + my $yes = _tr('yes'); + my $no = _tr('no'); + print _tr("Last time this vendor-OS was cloned, it has been cloned from '%s', now you specified a different source: '%s'\nWould you still like to proceed(%s/%s)? ", + $lastCloneSource, $source, $yes, $no); + my $answer = ; + exit 5 unless $answer =~ m[^\s*$yes]i; + } + } } + $self->createVendorOSPath(); + $self->clone_fetchSource($source); + if ($source ne $lastCloneSource) { + open(CLONE_INFO, "> $cloneInfoFile") + or die _tr("unable to create clone-info file '%s', giving up! (%s)\n", + $cloneInfoFile); + print CLONE_INFO "source=$source"; + close CLONE_INFO; + } vlog 0, _tr("Vendor-OS <%s> cloned succesfully.\n", $self->{'vendor-os-name'}); diff --git a/installer/slxos-setup b/installer/slxos-setup index ebac759a..bd279dcd 100755 --- a/installer/slxos-setup +++ b/installer/slxos-setup @@ -202,8 +202,9 @@ that distribution. If you pass an unknown selection, you will see a list of the selections that are available. -In clone-mode, leaving the selection empty will cause slxos-setup to generate -a special name for the vendor-os, like '-cloned-from-'. +In clone-mode, it is a good idea to specify some unqiue string as the selection +part of the vendor-os-name, such that you will easily recognize the vendor-OS +at a later stage. We recommend something like '-cloned-from-'. =back -- cgit v1.2.3-55-g7522