///////////////////////////////////////////////////////////
// Example annotated configuration file for dak
///////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////
// Common settings
///////////////////////////////////////////////////////////
Common
{
    //// ThreadCount (optional):  Maximum number of threads to use.  Defaults to 1
    ThreadCount 1;
};

///////////////////////////////////////////////////////////
// Essential.  List of database details.
///////////////////////////////////////////////////////////
DB
{
    //// Name (required): The name of the PostgreSQL database which has been
    //// created for dak.
    Name "projectb";

    //// Host (optional): The name of the host on which the database is located.
    //// Not necessary if the the database is local.
    //Host "";

    //// Port (optional): The port of the database if it is remote.  If the port
    //// is the default value (5432), this option can be set to -1.
    //Port -1;

    //// PoolSize (optional): should be at least ThreadCount + 1
    PoolSize 5;

    //// MaxOverflow (optional): shouldn't exceed postgresql.conf's
    //// max_connections - PoolSize
    MaxOverflow 13;

    //// Unicode (optional but seriously suggested).  Should be false for
    //// encoding == SQL_ASCII which is highly recommended.  Do not set this to
    //// anything else unless you really know what you're doing.
    Unicode "false";
};

///////////////////////////////////////////////////////////
// Dinstall general settings
///////////////////////////////////////////////////////////
Dinstall
{
    //// SigningKeyring (optional): this is the private keyring used by
    //// 'dak generate-releases'.
    SigningKeyring "/srv/dak/s3kr1t/dot-gnupg/secring.gpg";

    //// SigningPubKeyring (optional): this is the public keyring used by
    //// 'dak generate-releases'.
    SigningPubKeyring "/srv/dak/s3kr1t/dot-gnupg/pubring.gpg";

    //// Options::No-Mail (optional): Highly recommended.  This prevents dak
    //// from spamming people you didn't mean it to.  If you're not using this,
    //// you almost certainly want to use the MailWhiteList option
    Options::No-Mail "true";

    //// MailWhiteList (optional).  If you're not using No-Mail, this provides
    //// a list of email addresses or regular expressions, one per line which
    //// dak is allowed to email.  Regular expressions need to be prefixed by "RE:".
    //// Examples: "jane.doe@domain.com" or "RE:jane[^@]@domain.com", where the first will
    //// only allow to mail jane.doe@domain.com while the second will mail all of jane*@domain.com
    //// MailWhiteList "/some/path/to/a/file";

    //// SendmailCommand (required unless No-Mail is set): command to call the MTA.
    // SendmailCommand "/usr/sbin/sendmail -oi -t";

    //// MyEmailAddress (required): this is used as the From: line for sending mails
    //// as a script/daemon.
    MyEmailAddress "FTP Masters <ftpmaster@example.org>";

    //// MyAdminAddress (required): used as a contact address in mails.
    MyAdminAddress "ftpmaster@example.org";

    //// MyDistribution (required): this variable is used in emails sent out by
    //// dak and others.  It should indicate the name of the distribution.
    MyDistribution "MyDistro";

    //// BugServer (optional): is used by 'dak process-upload' and 'dak rm'
    //// when closing bugs.
    // BugServer "bugs.example.org";

    //// CloseBugs (optional): a boolean (default: no); if true the automated bug
    //// closing feature of dinstall is activated.  Must have BugServer set
    //// for this to work.
    CloseBugs "true";

    //// PackagesServer (optional): used by 'dak rm' and 'dak override' when
    //// carbon-copying a bug close mail to a package maintainer.
    // PackagesServer "packages.example.org";

    //// All sent mail is blind carbon copied to the email address in Bcc if it's
    //// not blank.
    // Bcc "archive@example.org";

    //// BXANotify (optional): a boolean (default: false); if true (Debian-specific)
    //// BXA notification is sent.  The template for the BXA notification is located
    //// in Dir::Templates/process-new.bxa_notification and should be changed if this
    //// option is set.
    // BXANotify "true";

    //// FutureTimeTravelGrace (optional): specifies how many seconds into the
    //// future timestamps are allowed to be inside a deb before being rejected.
    //// Defaults to 86400 (24 hours) if not specified.
    FutureTimeTravelGrace 86400;

    //// PastCutoffYear (optional): specifies the cut-off year which is used when
    //// deciding whether or not to reject packages based on the file timestamp.
    //// Defaults to "1975" if not specified.
    PastCutoffYear "1975";

    //// SkipTime (required): an integer value which is the number of seconds
    //// that a file must be older than (via it's last modified timestamp)
    //// before dak process-upload will REJECT rather than SKIP the package.
    SkipTime 300;

    //// OverrideDisparityCheck (optional): a boolean (default: false); if true,
    //// dak process-upload compares an uploads section/priority with the overrides and whines
    //// at the maintainer if they differ.
    OverrideDisparityCheck "false";

    //// OverrideMaintainer (optional): be used to globally override the
    //// __MAINTAINER_TO__ and __MAINTAINER_FROM__ variables in template mails.
    //// Use with caution.
    // OverrideMaintainer "";

    //// DefaultSuite (optional): which suite to default to where one isn't
    //// specified.  Defaults to "unstable" if not set.
    // DefaultSuite "unstable";

    //// LintianTags (optional): A set of lintian tags on which to reject
    //// packages at upload time.  Format is a YAML file; see the ftp-master
    //// version for an example.
    // LintianTags "/srv/dak/dak/config/debian/lintian.tags";

    //// ReleaseTransitions (optional): YAML File for blocking uploads to unstable
    // ReleaseTransitions "/srv/dak/web/transitions.yaml";

    //// KeyAutoFetch (optional): boolean (default: false), which if set (and
    //// not overridden by explicit argument to check_signature()) will enable
    //// auto key retrieval.  Requires KeyServer variable be
    //// set.  NB: you should only enable this variable on production systems
    //// if you have strict control of your upload queue.
    // KeyAutoFetch "false";

    //// KeyServer (optional): keyserver used for key auto-retrieval
    //// (c.f. KeyAutoFetch).
    // KeyServer "wwwkeys.eu.pgp.net";
};


///////////////////////////////////////////////////////////
// Dir (mandatory).  List of directory locations, e.g.
///////////////////////////////////////////////////////////
Dir
{
    //// Root (required): Specifies the path of the root of the FTP archive.
    Root "/srv/dak/ftp/";

    //// Pool (required): This variable specifies the path of the pool
    //// directory.  Debian packages will be placed in the pool by
    //// 'dak process-upload'
    Pool "/srv/dak/ftp/pool/";

    //// Templates (required): dak sends various mails and uses templates from
    //// this directory.
    Templates "/srv/dak/dak/templates/";

    //// Override (optional): This directory optionally stores override files (used
    //// by 'dak make-overrides').
    // Override "/src/dak/scripts/override/";

    //// Lists (optional): This directory holds file lists used by apt-ftparchive to
    //// generate Packages and Sources files (used by 'dak make-suite-file-list').
    //// Deprecated in favour of use of generate-packages-sources2
    // Lists "/srv/dak/database/dists/";

    //// Log (required): Directory to store dak logs in
    Log "/srv/dak/log/";

    //// Lock directory (required): Directory to store dak locks in
    Lock "/srv/dak/lock/";

    //// Morgue (required): Removed files are moved there.  The morgue has various
    //// sub-directories, including (optionally) those defined by
    //// Clean-Queues::MorgueSubDir and Clean-Suites::MorgueSubDir.
    Morgue "/srv/dak/morgue/";

    //// UrgencyLog (optional): If this directory is specified, 'dak
    //// process-upload' will store the urgency value of each upload.  This
    //// is mainly used for britney (the testing script).
    // UrgencyLog "/srv/dak/testing/urgencies/";

    //// Done (required): Directory in which to store processed .changes files
    Done "/srv/dak/queue/done/";

    //// BTSVersionTrack (optional): this directory holds the DebBugs
    //// Version Tracking support files.
    // BTSVersionTrack "/srv/dak/btsversiontrack";

    //// Queue (required): This sub-tree defines important directories for the
    //// incoming queue.  The following variables have to be set: Byhand, New
    //// NewStage, Reject, Unchecked.  An explanation of the function of
    //// these directories can be found in README.new-incoming.
    Queue
    {  
        Byhand "/srv/dak/queue/byhand/";
        New "/srv/dak/queue/new/";
        NewStage "/srv/dak/queue/newstage/";
        Reject "/srv/dak/queue/reject/";
        Unchecked "/srv/dak/queue/unchecked/";
    };
};

///////////////////////////////////////////////////////////
// SuiteMappings: (optional).  List of mappings for the Distribution file in a
// .changes file, e.g.:
///////////////////////////////////////////////////////////

// There are three mapping types:
//
// (1) map <source> <dest>
// Any target suite of '<source>' is unconditionally overridden to '<dest>'.
// (2) map-unreleased <source> <dest>
// Any upload targeted for suite '<source>' will be mapped to '<dest>' iff it
// contains uploads for an architecture that is not part of '<source>'.
// (3) ignore <suite>
// Any target suite of '<suite>' is unconditionally removed from the list of
// target suites.  NB: if the upload had only one target suite this will lead
// to rejection.

SuiteMappings
{
   "map stable proposed-updates";
   "map frozen unstable";
   "map-unreleased stable unstable";
   "map-unreleased proposed-updates unstable";
   "ignore testing";
};

///////////////////////////////////////////////////////////
// Urgency (mandatory) This defines the valid and default urgency of an upload.
// If a package is uploaded with an urgency not listed here, it will be
// rejected.
///////////////////////////////////////////////////////////

Urgency
{
  Default "low";
  Valid
  {
    low;
    medium;
    high;
    emergency;
    critical;
  };
};

