Package: R.filesets
===================

Version: 0.9.9 [2011-04-04]
o BUG FIX: equals() for GenericDataFile would consider to files not
  to be equal only if their checksums was equal, and vice versa.
  Also, when creating the message string explaining why they differ
  an error would have been thrown.


Version: 0.9.8 [2011-04-03]
o CLEANUP: Utilizing hpaste() internally wherever applicable.


Version: 0.9.7 [2011-03-11]
o ROBUSTNESS: Now appendFullNameTranslatorBy<what>() for <character>
  and <function> assert that the translator correctly returns exactly
  one string.  This has the effect that setFullName() and friends
  are also tested.


Version: 0.9.6 [2011-03-09]
o Added '=' to the list of safe characters for Arguments$getFilename().
o Added fullname(), name(), tags(), and dropTags().


Version: 0.9.5 [2011-02-27]
o BUG FIX: After the recent generalization of findByName() for
  GenericDataFileSet it would throw "<simpleError in paths[sapply(
  rootPaths, FUN = isDirectory)]: invalid subscript type 'list'>"
  in case no matching root path directories existed.


Version: 0.9.4 [2011-02-24]
o Added dropRootPathTags().
o GENERALIZATION: Added support to findByName() for GenericDataFileSet
  such that root paths also can be specified by simple regular expression
  (still via argument 'paths').  Currently it is only the last 
  subdirectory that can be expanded, e.g. foo/bar/data(,.*)/.


Version: 0.9.3 [2011-02-18]
o GENERALIZATION: Now byName() for GenericDataFileSet will try all
  possible data set directories located when trying to setup a data set.
  Before it only tried the first one located.  This new approach is
  equally fast for the first data set directory as before.  The advantage
  is that it adds further flexibilities, e.g. the first directory may
  not be what we want but the second, which can be further tested by
  the byPath() and downstream methods such as the constructor.
o ROBUSTNESS: Now writeColumnsToFiles() for TabularTextFile writes
  files atomically, which should minimize the risk for generating
  incomplete files.
o CLEANUP: Copied static getTags() for Arguments from aroma.core package.
o DEPRECATION: Added a warning message reporting that fromFiles() of
  GenericDataFileSet has been deprecated, if still called by someone.


Version: 0.9.2 [2011-02-14]
o GENERALIZATION: Now append() for GenericDataFileSet tries to also
  append non-GenericDataFileSet object by passing them down to
  appendFiles() assuming they are GenericDataFile:s.
o GENERALIZATION: Now appendFiles() for GenericDataFileSet also accepts
  a single item.  Thus, there is no longer a need to wrap up single
  items in a list.


Version: 0.9.1 [2010-11-19]
o ROBUSTNESS: Now GenericDataFileSet$byName() asserts that arguments
  'name' and 'tags' contain only valid characters.  This will for
  instance prevent passing paths or pathnames by mistake.
o Now appendFullNameTranslator(..., df) for FullNameInterface takes
  either 'pattern' or 'fixed' translations in data.frame.


Version: 0.9.0 [2010-08-19]
o Added sortBy() to GenericDataFileSet, which sorts files either
  in a lexicographic or a mixedsort order.
o DOCUMENTATION: Added more Rd help pages.
o DOCUMENTATION: Removed any duplicated \usage{} statements from
  the Rd documentation.


Version: 0.8.3 [2010-07-06]
o BUG FIX: indexOf() for GenericDataFileSet/List would return NA if
  the search pattern/string contained parentheses.  The reason is that
  such have a special meaning in regular expression.  Now indexOf()
  first search by regular expression patterns, then by fixed strings.
  Thanks Johan Staaf at Lund University and Larry(?) for reporting
  on this issue.


Version: 0.8.2 [2010-05-26]
o Now GenericDataFileSet$findByName(..., mustExist=FALSE) do no longer
  throw an exception even if there is no existing root path.
o Added argument 'firstOnly=TRUE' to findByName() for GenericDataFileSet.
o Added appendFullNameTranslatorBy...() methods to the
  FullNameInterface class for data frames, TabularTextFile:s, and
  TabularTextFileSet:s.


Version: 0.8.1 [2010-04-22]
o Added "NA" to the default 'na.strings' returned by getReadArguments()
  for TabularTextFile.


Version: 0.8.0 [2010-02-22]
o Submitted to CRAN.  No changes since v0.7.6.


Version: 0.7.6 [2010-02-13]
o Added argument '.onUnknownArgs' to GenericDataFile() and 
  GenericDataFileSet().  As before, the default is to throw an
  exception if there are unknown arguments.  However, in certain 
  case it is useful to allow (and ignore) "stray" arguments.


Version: 0.7.5 [2010-02-07]
o BUG FIX: indexOf() of GenericDataFileSet and GenericDataFileSetList
  did not handle names with regular expression symbols '+' and '*'. 
  Thanks to Randy Gobbel for the initial error report.


Version: 0.7.4 [2010-01-31]
o DOCUMENTATION: Added Rd help paged to more methods for classes
  GenericDataFile and GenericDataFileSet. 
o DEPRECATION: Deprecated static fromFiles() of GenericDataSet.  
  Use byPath() instead.


Version: 0.7.3 [2010-01-24]
o ROBUSTNESS: If argument 'files' is logical, then extract() of
  GenericDataFileSet and GenericDataFileSetList now asserts that the
  length of 'files' matches the number of available files.


Version: 0.7.2 [2010-01-12]
o Added some example data files under exData/.
o BUG FIX: readColumns(..., column=<string>) on a TabularTextFile 
  would give "Error ... object 'columnNames' not found".


Version: 0.7.1 [2010-01-02]
o Now setExtensionPattern(..., pattern=NULL) of GenericDataFile works.
o Added argument 'default="\\.([^.]+)$"' to getExtensionPattern() 
  of GenericDataFile.  Before the default value was hardcoded
  inside this function.


Version: 0.7.0 [2010-01-02]
o Added protected as.data.frame() to GenericDataFileSetList.
o Now GenericDataFile(NA, mustExist=FALSE) is a valid object.  
  Made all methods aware of such missing files.
o Now extract(ds, c(1,2,NA,4), onMissing="NA") returns a valid
  GenericDataFileSet where missing files are returned as missing
  GenericDataFile:s.
o Added na.rm=TRUE to all getTags() so that it returns NULL in case
  the file is missing.
o copyTo() of GenericDataFileSet quietly ignores missing files.
o Added Rd help for indexOf() of GenericDataFileSet.
o ROBUSTNESS: Using new Arguments$getInstanceOf() were possible.
o ROBUSTNESS: Now all index arguments are validated correctly 
  using the new 'max' argument of Arguments$getIndices().  Before
  the case where "max == 0" was not handled correctly.
o BUG FIX: Changed the default to 'parent=0' for getDefaultFullName() 
  of GenericDataFileSet to be consistent with the documentation.
o BUG FIX: Now GenericDataFile(pathname) throws an error if 'pathname'
  is referring to a directory.
o BUG FIX: getPath() and getDefaultFullName() of GenericDataFileSet 
  would return a *logical* instead of *character* value.
o BUG FIX: indexOf(ds, names) of GenericDataFileSet would return a
  *logical* instead of an *integer* vector of NA:s if none of the 
  names existed.


Version: 0.6.5 [2009-10-30]
o ROBUSTIFICATION: Now translateFullName() of FullNameInterface 
  and translateColumnNames() of GenericTabularFile throw an 
  exception if some fullnames were translated into NA.  They
  also assert that no names were dropped or added in the process.
o BUG FIX: After doing append() to a GenericDataFileSet, the
  total file size reported would remain the same.
o BUG FIX: Appending empty data sets using append() of GenericDataFileSet
  would give error Error in this$files[[1]] : subscript out of bounds.


Version: 0.6.4 [2009-10-25]
o Added get- and setExtensionPattern() to FullNameInterface.
o Added getExtension() to GenericDataFile.


Version: 0.6.3 [2009-10-23]
o Added appendFullNameTranslatorBylist() which makes it possible to do
  setup a sequence of fullnames translators fnt1, fnt2, fnt3 by calling
  setFullNameTranslator(..., list(fnt1, fnt2, fnt3)).


Version: 0.6.2 [2009-10-22]
o Added support for having a sequence of fullname translator 
  functions.  These can be added using appendFullNameTranslator().
o Added an example() to FullNameInterface.


Version: 0.6.1 [2009-10-06]
o Added subsetting via [() to TabularTextFile.


Version: 0.6.0 [2009-10-02]
o Added the FullNameInterface, which is the interface class that
  defines what fullnames, names, tags etc are.
o Now setFullName*s*Translator() for GenericDataFileSet dispatches 
  on the 'by' argument.  If that is not possible, it call 
  setFullNameTranslator() for each file in the set (as before).
o CLEAN UP: Renamed fromFiles() to byPath().  For backward 
  compatibility the former calls the latter. 
o CLEAN UP: GenericDataFile and GenericDataFileSet implements
  the FullNameInterface, which mean less redundant code.


Version: 0.5.3 [2009-08-12]
o Now findByName() of GenericDataFileSet follows Windows Shortcut 
  links also for subdirectories.


Version: 0.5.2 [2009-06-08]
o Analogously to the method for a GenericDataFile, the 
  setFullNameTranslator() method for GenericDataFileSet now
  assumes that the fullname translator function accepts also
  argument 'set'.
o Added argument '.fileSetClass' to GenericDataFileSet().


Version: 0.5.1 [2009-05-19]
o A fullname translator function for a GenericDataFile should accept
  any number of arguments.  The first argument will always be 
  (an unnamed) argument containing the name (or names) to be 
  translated.  If the translator is for a GenericDataFile, an
  additional argument 'file' will also be passed.  This allows
  the translator function to for instance read the file header
  and infer the name that way.


Version: 0.5.0 [2009-05-17]
o Extracted several classes and methods from the aroma.core package.
o Created package.
