code: func (v Simple) Archive(filePath string) error {
  	err := archiveFile(v.folderFs, v.versionsFs, filePath, TagFilename)
  	if err != nil {
  		return err
  	}
  
  	file := filepath.Base(filePath)
  	dir := filepath.Dir(filePath)
  
  	// Glob according to the new file~timestamp.ext pattern.
  	pattern := filepath.Join(dir, TagFilename(file, TimeGlob))
  	newVersions, err := v.versionsFs.Glob(pattern)
  	if err != nil {
  		l.Warnln("globbing:", err, "for", pattern)
  		return nil
  	}
  
  	// Also according to the old file.ext~timestamp pattern.
  	pattern = filepath.Join(dir, file+"~"+TimeGlob)
  	oldVersions, err := v.versionsFs.Glob(pattern)
  	if err != nil {
  		l.Warnln("globbing:", err, "for", pattern)
  		return nil
  	}
  
  	// Use all the found filenames. "~" sorts after "." so all old pattern
  	// files will be deleted before any new, which is as it should be.
  	versions := util.UniqueStrings(append(oldVersions, newVersions...))
  
  	if len(versions) > v.keep {
  		for _, toRemove := range versions[:len(versions)-v.keep] {
  			l.Debugln("cleaning out", toRemove)
  			err = v.versionsFs.Remove(toRemove)
  			if err != nil {
  				l.Warnln("removing old version:", err)
  			}
  		}
  	}
  
  	return nil
  }
docs: // Archive moves the named file away to a version archive. If this function
  // returns nil, the named file does not exist any more (has been archived).