Names and Errors
Names
Its important to name your commands appropriately, Mercurial will automatically
rename Lambda
and StatefulLambda
commands to match a convention. Command
names are used to identify the command within a larger structure, this is
especially important when it comes to errors within commands.
When naming a command this ‘rename’ function is used
‘MyCoolCommandName’ will come out as ‘my-cool-command-name’. If its important, we can use a backslash at the start of the command name to prevent modification:
This will come out as ‘MyCoolCommandName’
Its best to just follow the all lower case dash separated system for commands so that you get what you expect.
Errors
When your code in a command throws an error Mercurial will catch it and spit out an s-expression representation of the command.
For a simple command that is being run directly, this is just the name of the command, and Mercurial will tell you the phase that it crashed in.
We’ll use this command to demonstrate.
When lambda
is scheduled, this error message will be displayed as part of the
stack trace:
We’ll get the actual cause exception as well, but this is just to help us identify where it came from.
First, we get told that the exception was thrown in the ‘initialise’ phase, and second, that the command was named ‘lambda’. Cool!
Ok, now lets look at a group:
When group
is scheduled, this error message will be displayed as part of the
stack trace:
We’ll get the actual cause exception as well, but this is just to help us identify where it came from.
First, we get told that the exception was thrown in the ‘initialise’ phase,
second, that the command was named ‘lambda’, third we get given an s-expression
representation of the group that it was in, and it is marked as ERR
.
S-expressions are easy to read, and make it easy to group information together.
As we look at each of the group and utility commands, we will also explore their representation.