/* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
   file Copyright.txt or https://cmake.org/licensing for details.  */
#ifndef cmCTestBZR_h
#define cmCTestBZR_h

#include "cmConfigure.h" // IWYU pragma: keep

#include <iosfwd>
#include <string>

#include "cmCTestGlobalVC.h"

class cmCTest;

/** \class cmCTestBZR
 * \brief Interaction with bzr command-line tool
 *
 */
class cmCTestBZR : public cmCTestGlobalVC
{
public:
  /** Construct with a CTest instance and update log stream.  */
  cmCTestBZR(cmCTest* ctest, std::ostream& log);

  ~cmCTestBZR() override;

private:
  // Implement cmCTestVC internal API.
  bool NoteOldRevision() override;
  bool NoteNewRevision() override;
  bool UpdateImpl() override;

  // URL of repository directory checked out in the working tree.
  std::string URL;

  std::string LoadInfo();
  bool LoadModifications() override;
  bool LoadRevisions() override;

  // Parsing helper classes.
  class InfoParser;
  class LogParser;
  class RevnoParser;
  class StatusParser;
  class UpdateParser;

  friend class InfoParser;
  friend class LogParser;
  friend class RevnoParser;
  friend class UpdateParser;
  friend class StatusParser;
};

#endif
