| Below is a summary of the code style conventions for Chromium OS | 
 | upstart jobs.  Please use this style for all new upstart jobs. | 
 |  | 
 | Due to history, not all jobs in this package conform to style; you | 
 | are encouraged to update files to conform when you make changes. | 
 |  | 
 | == Whitespace conventions: | 
 |   * Indentation is in 2 column increments. | 
 |   * Indent with spaces, not tabs. | 
 |   * Lines should not exceed 72 columns; lines must not exceed 80 | 
 |     columns. | 
 |   * Long lines may be continued with a '\' at end of line.  The | 
 |     first continuation line must be indented at least 2 columns; | 
 |     more may be used to align the text with some significant element | 
 |     on the line being continued.  Subsequent continuation lines | 
 |     should be indented to align with the first continuation line. | 
 |  | 
 |  | 
 | == Breaking the rules: | 
 | "A foolish consistency is the hobgoblin of little minds" | 
 |   Ralph Waldo Emerson | 
 |  | 
 | "The young man knows the rules, but the old man knows the exceptions." | 
 |   Oliver Wendell Holmes | 
 |  | 
 | Code style guidelines exist to create consistency in the source | 
 | code, and to avoid constructs that lead to bugs.  If you think the | 
 | style guide is interfering with writing good code, you can break the | 
 | rules provided: | 
 |  1) You know what you're doing. | 
 |  2) You've got a good reason for doing it. | 
 |  3) You provide a clear comment explaining why it's necessary. | 
 |  | 
 |  | 
 | == Standard template: | 
 |   # Copyright 2012 The ChromiumOS Authors | 
 |   # Use of this source code is governed by a BSD-style license that can be | 
 |   # found in the LICENSE file. | 
 |  | 
 |   description     "<description of job>" | 
 |   author          "chromium-os-dev@chromium.org" | 
 |  | 
 |   # Optional comment describing the job.  Explain anything | 
 |   # non-obvious that's not explained in the description.  Explain | 
 |   # any non-obvious dependencies in the start and stop conditions, | 
 |   # and justify 'task' if necessary.  If everything you might say | 
 |   # is covered in 'description', 'start on', 'stop on', etc., leave | 
 |   # this out. | 
 |   start on ...          # optional | 
 |   stop on ...           # optional; typically not with 'task' | 
 |   respawn               # optional; typically not with 'task' | 
 |   task                  # optional; typically not with 'stop' or 'respawn' | 
 |  | 
 |   # other upstart stanzas as needed | 
 |  | 
 |   pre-start ...         # optional | 
 |  | 
 |   post-start ...        # optional | 
 |  | 
 |   expect ...            # optional | 
 |  | 
 |   exec ...              # optional, can't use this with "script" | 
 |   script ...            # optional, can't use this with "exec" | 
 |  | 
 |   pre-stop ...          # optional | 
 |  | 
 |   post-stop ...         # optional | 
 |  | 
 |  | 
 | == Notes about the use of 'task' | 
 | The 'task' keyword does not mean "this job should not respawn"; it | 
 | means that when the job starts, other jobs may be forced to wait for | 
 | its completion.  In particular: | 
 |   * If a task starts because of a 'start on starting x' clause, the | 
 |     'x' job's pre-start, post-start, and main commands will wait for | 
 |     the task to terminate. | 
 |   * If a task starts because of a 'start on stopping x' clause, the | 
 |     'x' job's post-stop commands will wait for the task to | 
 |     terminate. | 
 |   * If a task is started by 'initctl emit', the 'initctl' command | 
 |     will wait for the task to terminate. | 
 | Only use 'task' if the task's start conditions require one of these | 
 | delays (e.g. to prevent a race condition).  If you use 'task', the | 
 | reason should typically be explained in the job's descriptive | 
 | comments. | 
 |  | 
 | In general, 'task' should not be used with either 'stop on' or | 
 | 'respawn'. | 
 |  | 
 |  | 
 | == Format of 'script' and 'exec' commands: | 
 | If the command for 'exec' or 'script' involves compound shell | 
 | statements, such as a pipe, 'if', or 'for', use 'script'; otherwise, | 
 | use 'exec'. | 
 |  | 
 | For a job that uses 'respawn', a 'pre-start script' with a main | 
 | process invoked via 'exec' is preferable to a main process invoked | 
 | with 'script' without 'pre-start'.  If your job uses 'respawn' but | 
 | the main process must be a script, then | 
 |   * The final command in the script should be invoked with 'exec'. | 
 |   * The job should not use 'expect fork' or 'expect daemon'. | 
 |  | 
 | A 'script' stanza (including for pre-start, pre-stop, etc.) consists | 
 | of multiple shell commands, laid out as with this template: | 
 |   script | 
 |     # commands here, indented | 
 |   end script | 
 |  | 
 | The commands in 'script' and 'exec' stanzas must conform to | 
 | Chromium OS shell style conventions, most notably: | 
 |   * Use only POSIX standard features.  Note that the shell | 
 |     interpreter is 'dash', not 'bash'. | 
 |   * Use $() for command substitution, not `` | 
 |   * Format compound statements such as 'if', 'for', and 'while' | 
 |     along these lines: | 
 |       if [ -f "${testfile}" ] ; then | 
 |         # ... | 
 |       fi | 
 |   * In general, don't use a fully qualified path name for a command | 
 |     located in any of the following directories: | 
 |       /bin /sbin /usr/bin /usr/sbin | 
 |  | 
 |  | 
 | == Conventions for logging messages | 
 | Jobs can (should) log significant events via syslog for debug or | 
 | diagnosis.  Use this idiom for messages: | 
 |   logger -t "${UPSTART_JOB}" "<your message goes here>" |