# HG changeset patch # User Rik # Date 1326950833 28800 # Node ID 3e94663fc3e92ffcd51ff220b94681b5e5a2e6c8 # Parent 6ec182c207af988aecb77596ee8fbad14c575ff8 news.m: Revamp implementation of function. * news.m: Put input checking first. Close file handle when done. Add tests. Update docstring. diff --git a/scripts/miscellaneous/news.m b/scripts/miscellaneous/news.m --- a/scripts/miscellaneous/news.m +++ b/scripts/miscellaneous/news.m @@ -17,20 +17,27 @@ ## . ## -*- texinfo -*- -## @deftypefn {Function File} {} news (@var{package}) -## Display the current NEWS file for Octave or installed package. +## @deftypefn {Function File} {} news +## @deftypefnx {Function File} {} news (@var{package}) +## Display the current NEWS file for Octave or an installed package. ## -## If @var{package} is the name of an installed package, display the current -## NEWS file for that package. +## When called without an argument, display the NEWS file for Octave. +## When given a package name @var{package}, display the current NEWS file for +## that package. ## @end deftypefn function news (package = "octave") - if (ischar (package) && strcmpi (package, "octave")) + if (nargin > 1) + print_usage (); + elseif (! ischar (package)) + error ("news: PACKAGE must be a string"); + endif + + if (strcmpi (package, "octave")) octetcdir = octave_config_info ("octetcdir"); newsfile = fullfile (octetcdir, "NEWS"); - - elseif (nargin == 1 && ischar (package)) + else installed = pkg ("list"); names = cellfun (@(x) x.name, installed, "UniformOutput", false); ## we are nice and let the user use any case on the package name @@ -39,25 +46,25 @@ error ("Package '%s' is not installed.", package); endif newsfile = fullfile (installed{pos}.dir, "packinfo", "NEWS"); - - else - print_usage; endif - if (exist (newsfile, "file")) - f = fopen (newsfile, "r"); - while (ischar (line = fgets (f))) - puts (line); - endwhile - else + if (! exist (newsfile, "file")) if (strcmpi (package, "octave")) error ("news: unable to locate NEWS file"); else - error ("news: unable to locate NEWS file of %s package", package); + error ("news: unable to locate NEWS file for package %s", package); endif endif + fid = fopen (newsfile, "r"); + while (ischar (line = fgets (fid))) + puts (line); + endwhile + fclose (fid); + endfunction -## Remove from test statistics. No real tests possible -%!assert (1) + +%!error news (1, 2) +%!error news (1) +%!error news ("__NOT_A_VALID_PKG_NAME__")