Skip navigation

Monotone howto

Monotone is a distributed version control system with tightly integrated cryptographic integrity and authenticity checks. This howto is not meant to be an exhaustive set of documentation on monotone (see their huge set of manuals and wiki for that), but merely a means to bootstrap Syndie developers.

Tracking Syndie development

If your primary goal is to pull the latest development code, there is little to no setup required:

  1. Install monotone
  2. Create a monotone database:
    mtn db init --db=./syndie.mtn
  3. Create a monotone nym:
    mtn genkey arbitrary@name
  4. Pull the latest code into your monotone database:
    mtn --db=./syndie.mtn pull mtn.i2p-projekt.de "i2p.syndie"
  5. Check out the latest code from your monotone database into a new "workspace"
    mtn --db=./syndie.mtn checkout --branch="i2p.syndie" syndie
  6. You're good to go! The code is now in ./syndie/

Whenever you want to pull any more changes, run step 4 again, and then go into your monotone workspace (./syndie/) and run mtn update

Contributing to Syndie development

If you will be contributing to the codebase repeatedly you'll want to get commit priviledges on the mtn.i2p-projekt.de repository directly.

  1. Create a long lasting monotone nym for development, using a valid email address:
    mtn genkey yournick@mail.i2p
  2. Create a transient monotone nym for synchronizing with the repository:
    mtn genkey yournick-transport@mail.i2p
  3. Make sure your commits will be signed by the long lasting nym:
    cat >> ~/.monotone/monotonerc
    function get_branch_key (branchname)
      return "yournick@mail.i2p"
    end
    ^D
  4. You can have monotone remember the passphrases to those passwords as well:
    cat >> ~/.monotone/monotonerc
    function get_passphrase (keypair_id)
      if ("yournick@mail.i2p" == keypair_id) then
        return "the_author_passphrase"
      elseif ("yournick-transport@mail.i2p" == keypair_id) then
        return "the_transport_passphrase"
      else
        return false
      end
    end
    ^D
  5. Send both public keys to zzz@mail.i2p so that they can be authorized
    mtn pubkey yournick@mail.i2p > keys.txt ; mtn pubkey yournick-transport@mail.i2p >>keys.txt

Once the keys are authorized the transient nym will be granted write permission to the mtn.i2p-projekt.de repository.

Monotone development cheatsheet: