diff options
author | Norbert Preining <preining@logic.at> | 2009-02-05 14:54:38 +0000 |
---|---|---|
committer | Norbert Preining <preining@logic.at> | 2009-02-05 14:54:38 +0000 |
commit | 751e159080c2e64f88cf166869cb51090227e3e5 (patch) | |
tree | f750301ffc61dc24c893a2e38a9555c2d0bdff59 | |
parent | b9477c893814746095eaf0aad80b354620ac2421 (diff) |
install-tl and intstall_package(s): rework the error behaviour logic: We
now return 1/0 (success/failure) in install_package(s) and give tlwarn
there if something fails. This way the warnings appear in the log window
of the GUI installers.
Then we return 0 and install-tl itself creates the profile and dies.
git-svn-id: svn://tug.org/texlive/trunk@12097 c570f23f-e606-0410-a88d-b1316a301751
-rwxr-xr-x | Master/install-tl | 14 | ||||
-rw-r--r-- | Master/tlpkg/TeXLive/TLUtils.pm | 59 |
2 files changed, 48 insertions, 25 deletions
diff --git a/Master/install-tl b/Master/install-tl index ac34c122baf..d6479523627 100755 --- a/Master/install-tl +++ b/Master/install-tl @@ -925,7 +925,19 @@ sub do_install_packages { foreach my $package (sort keys %install) { push @what, $package if ($install{$package} == 1); } - install_packages($tlpdb,$media,$localtlpdb,\@what,$vars{'option_src'},$vars{'option_doc'}); + if (!install_packages($tlpdb,$media,$localtlpdb,\@what, + $vars{'option_src'},$vars{'option_doc'})) { + my $profile_name = "installation.profile"; + create_profile($profile_name); + tlwarn("Installation failed.\n"); + tlwarn("Rerunning the installer will try to restart the installation.\n"); + tlwarn("Or you can restart by running the installer with:\n"); + if (win32()) { + tlwarn(" install-tl.bat --profile $profile_name [EXTRA-ARGS]\n"); + } else { + tlwarn(" install-tl --profile $profile_name [EXTRA-ARGS]\n"); + } + } } # for later complete removal we want to save some options and values diff --git a/Master/tlpkg/TeXLive/TLUtils.pm b/Master/tlpkg/TeXLive/TLUtils.pm index 915888823b9..38a630b0ecf 100644 --- a/Master/tlpkg/TeXLive/TLUtils.pm +++ b/Master/tlpkg/TeXLive/TLUtils.pm @@ -905,6 +905,8 @@ the TLPDB C<$from_tlpdb>. C<$opt_src> and C<$opt_doc> specify whether srcfiles and docfiles should be installed (currently implemented only for installation from DVD). +Returns 1 on success and 0 on error. + =cut sub install_packages { @@ -1013,8 +1015,13 @@ sub install_packages { } elsif ($media eq 'NET') { $container = "$root/$Archive/$package.$DefaultContainerExtension"; } - install_package($container, $tlpobj->containersize, $tlpobj->containermd5, - \@installfiles, $totlpdb->root, $vars{'this_platform'}); + if (!install_package($container, $tlpobj->containersize, + $tlpobj->containermd5, \@installfiles, + $totlpdb->root, $vars{'this_platform'})) { + # we already warn in install_package that something bad happened, + # so only return here + return 0; + } # if we are installing from CD or NET we have to fetch the respective # source and doc packages $pkg.source and $pkg.doc and install them, too if (($media eq 'NET') || ($media eq 'CD')) { @@ -1030,17 +1037,21 @@ sub install_packages { if ($container_src_split && $opt_src && $tlpobj->srcfiles) { my $srccontainer = $container; $srccontainer =~ s/(\.tar\.lzma|\.zip)$/.source$1/; - install_package($srccontainer, $tlpobj->srccontainersize, - $tlpobj->srccontainermd5, \@installfiles, - $totlpdb->root, $vars{'this_platform'}); + if (!install_package($srccontainer, $tlpobj->srccontainersize, + $tlpobj->srccontainermd5, \@installfiles, + $totlpdb->root, $vars{'this_platform'})) { + return 0; + } } if ($container_doc_split && $real_opt_doc && $tlpobj->docfiles) { my $doccontainer = $container; $doccontainer =~ s/(\.tar\.lzma|\.zip)$/.doc$1/; - install_package($doccontainer, - $tlpobj->doccontainersize, - $tlpobj->doccontainermd5, \@installfiles, - $totlpdb->root, $vars{'this_platform'}); + if (!install_package($doccontainer, + $tlpobj->doccontainersize, + $tlpobj->doccontainermd5, \@installfiles, + $totlpdb->root, $vars{'this_platform'})) { + return 0; + } } } # we don't want to have wrong information in the tlpdb, so remove the @@ -1068,6 +1079,7 @@ sub install_packages { info(sprintf("Time used for installing the packages: %02d:%02d\n", $totmin, $totsec)); $totlpdb->save; + return 1; } @@ -1094,6 +1106,8 @@ file on the system and is likewise piped through C<lzmadec> and C<tar>. In both of these cases currently the list C<$@filelistref> currently is not taken into account (should be fixed!). +Returns 1 on success and 0 on error. + =cut sub install_package { @@ -1105,7 +1119,8 @@ sub install_package { my $wget = $::progs{'wget'}; my $lzmadec = $::progs{'lzmadec'}; if (!defined($wget) || !defined($lzmadec)) { - die "install_package: wget/lzmadec programs not set up properly, strange"; + tlwarn("install_package: wget/lzmadec programs not set up properly.\n"); + return 0; } if (ref $what) { # we are getting a ref to a list of files, so install from DVD @@ -1183,18 +1198,8 @@ sub install_package { # we are installing from the NET # download the file and put it into temp if (!download_file($what, $lzmafile) || (! -r $lzmafile)) { - my $profile_name = "installation.profile"; - &main::create_profile($profile_name); tlwarn("Downloading $what did not succeed.\n"); - tlwarn("Rerunning the installer will try to ", - "restart the installation.\n"); - tlwarn("Or you can restart by running the installer with:\n"); - if (win32()) { - tlwarn(" install-tl.bat --profile $profile_name [EXTRA-ARGS]\n"); - } else { - tlwarn(" install-tl --profile $profile_name [EXTRA-ARGS]\n"); - } - die "\n"; + return 0; } } else { # we are installing from CD @@ -1205,12 +1210,18 @@ sub install_package { debug("un-lzmaing $lzmafile to $tarfile\n"); system("$lzmadec < $lzmafile_quote > $tarfile_quote"); if (! -f $tarfile) { - die "Unpacking $lzmafile did not succeed, please retry"; + tlwarn("Unpacking $lzmafile did not succeed.\n"); + return 0; + } + if (!TeXLive::TLUtils::untar($tarfile, $target, 1)) { + tlwarn("Un-tarring $tarfile did not succeed.\n"); + return 0; } - TeXLive::TLUtils::untar($tarfile, $target, 1); } else { - die "sorry, don't know how to install $what"; + tlwarn("Sorry, no idea how to install $what\n"); + return 0; } + return 1; } |