code: func (v *Staggered) Archive(filePath string) error {
  	l.Debugln("Waiting for lock on ", v.versionsFs)
  	v.mutex.Lock()
  	defer v.mutex.Unlock()
  
  	if err := archiveFile(v.folderFs, v.versionsFs, filePath, TagFilename); err != nil {
  		return err
  	}
  
  	file := filepath.Base(filePath)
  	inFolderPath := filepath.Dir(filePath)
  
  	// Glob according to the new file~timestamp.ext pattern.
  	pattern := filepath.Join(inFolderPath, 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(inFolderPath, file+"~"+TimeGlob)
  	oldVersions, err := v.versionsFs.Glob(pattern)
  	if err != nil {
  		l.Warnln("globbing:", err, "for", pattern)
  		return nil
  	}
  
  	// Use all the found filenames.
  	versions := append(oldVersions, newVersions...)
  	v.expire(util.UniqueStrings(versions))
  
  	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).