Notes for repo-ng developers
============================

Code style
----------

repo-ng code is subject to [ndn-cxx code style](https://named-data.net/doc/ndn-cxx/current/code-style.html).

Licensing
---------

All contributions to **repo-ng** project must be licensed under GPL 3.0+ or compatible
license.  When GPL 3.0 license is used, the following is the recommended license
boilerplate to be put into all `.hpp` and `.cpp` files:

    /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
    /*
     * Copyright (c) [Year(s)],  [Copyright Holder(s)].
     *
     * This file is part of NDN repo-ng (Next generation of NDN repository).
     * See AUTHORS.md for complete list of repo-ng authors and contributors.
     *
     * repo-ng is free software: you can redistribute it and/or modify it under the terms
     * of the GNU General Public License as published by the Free Software Foundation,
     * either version 3 of the License, or (at your option) any later version.
     *
     * repo-ng is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
     * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
     * PURPOSE.  See the GNU General Public License for more details.
     *
     * You should have received a copy of the GNU General Public License along with
     * repo-ng, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
     ////// [optional part] //////
     *
     * @author Author's Name <email@domain-or-homepage://url>
     * @author Other Author's Name <another.email@domain-or-homepage://url>
     ////// [end of optional part] //////
     */
