Abe decides to do some work on his part of the code. He has a copy of
Jim's database contents, but cannot edit any of that data yet. He
begins his editing by checking out the head of the
jp.co.juicebot.jb7
branch into a working copy, so he can edit
it:
$ monotone --db=abe.db --branch=jp.co.juicebot.jb7 checkout .
Monotone unpacks the set of files in the head revision's manifest directly into Abe's current directory. (If he had specified something other than . at the end, monotone would have created that directory and unpacked the files into it.) Abe then opens up one of the files, src/apple.c, and edits it:
$ vi src/apple.c <Abe writes some apple-juice dispensing code>
The file src/apple.c has now been changed. Abe gets up to answer a phone call, and when he returns to his work he has forgotten what he changed. He can ask monotone for details:
$ monotone diff # # patch "src/apple.c" # from [2650ffc660dd00a08b659b883b65a060cac7e560] # to [e2c418703c863eabe70f9bde988765406f885fd0] # --- src/apple.c +++ src/apple.c @ -1,7 +1,10 @ #include "jb.h" void dispense_apple_juice() { - /* Fill this in please, Abe. */ + spoutctl(APPLE_SPOUT, FLOW_JUICE, 1); + while (spoutctl(APPLE_SPOUT, POLL_JUICE, 1) == 0) + usleep (1000); + spoutctl(APPLE_SPOUT, FLOW_JUICE, 0); }
Satisfied with his day's work, Abe decides to commit.
$ monotone commit monotone: beginning commit monotone: manifest b33cb337dccf21d6673f462d677a6010b60699d1 monotone: revision 70decb4b31a8227a629c0e364495286c5c75f979 monotone: branch jp.co.juicebot.jb7
Abe neglected to provide a --message option specifying the change log on the command line and the file MT/log is empty because he did not document his changes there. Monotone therefore invokes an external “log message editor” — typically an editor like vi — with an explanation of the changes being committed and the opportunity to enter a log message.
polling implementation of src/apple.c MT: MT: ---------------------------------------------------------------------- MT: Enter Log. Lines beginning with `MT:' are removed automatically MT: MT: new_manifest [b33cb337dccf21d6673f462d677a6010b60699d1] MT: MT: old_revision [2e24d49a48adf9acf3a1b6391a080008cbef9c21] MT: old_manifest [2098eddbe833046174de28172a813150a6cbda7b] MT: MT: patch "src/apple.c" MT: from [2650ffc660dd00a08b659b883b65a060cac7e560] MT: to [e2c418703c863eabe70f9bde988765406f885fd0] MT: MT: ---------------------------------------------------------------------- MT:
Abe enters a single line above the explanatory message, saying “polling implementation of src/apple.c”. He then saves the file and quits the editor. Monotone deletes all the lines beginning with “MT:” and leaves only Abe's short message. Returning to the shell, Abe's commit completes:
monotone: committed revision 70decb4b31a8227a629c0e364495286c5c75f979
Abe then sends his new revision back to Jim:
$ monotone sync jim-laptop.juicebot.co.jp jp.co.juicebot.jb7 monotone: rebuilding merkle trees for collection jp.co.juicebot.jb7 monotone: including branch jp.co.juicebot.jb7 monotone: [keys: 2] [rcerts: 8] monotone: connecting to jim-laptop.juicebot.co.jp monotone: [bytes in: 630] [bytes out: 2844] monotone: successful exchange with jim-laptop.juicebot.co.jp
Beth does a similar sequence. First she syncs her database with Jim's:
monotone --db=beth.db sync jim-laptop.juicebot.co.jp jp.co.juicebot.jb7 monotone: rebuilding merkle trees for collection jp.co.juicebot.jb7 monotone: connecting to jim-laptop.juicebot.co.jp monotone: [bytes in: 3200] [bytes out: 673] monotone: successful exchange with jim-laptop.juicebot.co.jp
She checks out a copy of the tree from her database:
$ monotone --db=beth.db --branch=jp.co.juicebot.jb7 checkout .
She edits the file src/banana.c:
$ vi src/banana.c <Beth writes some banana-juice dispensing code>
and logs her changes in MT/log right away so she does not forget what she has done like Abe.
$ vi MT/log * src/banana.c: Added polling implementation
and logs her changes in MT/log right away so she does not forget what she has done:
$ vi MT/log * src/banana.c: Added polling implementation
Later, she commits her work. Monotone again invokes an external editor for her to edit her log message, but this time it fills in the messages she's written so far, and she simply checks them over one last time before finishing her commit:
$ monotone commit monotone: beginning commit monotone: manifest eaebc3c558d9e30db6616ef543595a5a64cc6d5f monotone: revision 80ef9c9d251d39074d37e72abf4897e0bbae1cfb monotone: branch jp.co.juicebot.jb7 monotone: committed revision 80ef9c9d251d39074d37e72abf4897e0bbae1cfb
And she syncs with Jim again:
$ monotone sync jim-laptop.juicebot.co.jp jp.co.juicebot.jb7 monotone: rebuilding merkle trees for collection jp.co.juicebot.jb7 monotone: including branch jp.co.juicebot.jb7 monotone: [keys: 3] [rcerts: 12] monotone: connecting to jim-laptop.juicebot.co.jp monotone: [bytes in: 630] [bytes out: 2844] monotone: successful exchange with jim-laptop.juicebot.co.jp