Rosie
Rosie is a tool for managing Rose suite configurations which is included in Rose. The purpose of Rosie is to facilitate suite development, management and collaboration. Rosie:
Adds version control to Rose suite configurations.
Updates a database to keep track of Rose suite configurations.
Warning
This tutorial does not require specific FCM knowledge but basic version control awareness is important. For more information on FCM version control see the FCM User Guide.
Rosie Suites
A Rosie suite is a Rose suite configuration which is managed by the Rosie system.
Rosie suites can be created by the command:
- rosie create
Create a new suite.
Create a new suite, starting with the content of another suite. (rosie copy is an alias that extends rosie create)
By default Rosie creates the working copy (local copy) of new suites in
the ~/roses
directory though Rosie working copies can be created
elsewhere.
Version Control
In Rosie suites the run directory is added to version control using FCM.
FCM is a SVN (Subversion) wrapper which provides a standard working practice for SVN projects. FCM implements all of the SVN commands as well as additional functionality. See the FCM User Guide for more information.
Suite Naming
Each Rosie suite is assigned a unique name made up of a prefix followed by a hyphen and then an identifier made up of two characters and three numbers, e.g:
The prefix denotes the repository in which the suite is located. Prefixes are
site specific and are configured by the
rose.conf[rosie-id]prefix-location.PREFIX
setting.
Within the Rose user community the u
prefix is typically configured to
point at the https://code.metoffice.gov.uk
repository.
The rose-suite.info
File
All Rosie suites require a rose-suite.info
file. This file
provides information about the suite for use in the suite management and
version control systems. The rose-suite.info
file uses the
Rose Configuration Format.
The main settings are:
title
A short title for the suite.
owner
The user who has control over the suite (i.e. their username).
project
The project to which this suite belongs (can be an arbitrary name).
access-list
An optional list of users who have permission to commit to the trunk of the suite.
Managing Suites
Rosie provides commands for managing suites, including:
- rosie checkout
Creates a local copy of a suite.
- rosie ls
Lists all locally checked-out suites.
- rosie lookup
Searches the suite database (using information from suite’s
rose-suite.info
files).
Practical
In this practical we will add the weather-forecasting suite from the previous practical to a rosie repository, make some changes, and commit them to the repository.
Note
For brevity this practical uses the abbreviated version of SVN commands,
e.g. svn st
is the abbreviated form of svn status
.
FCM supports both the full and abbreviated names.
Create A New Rosie Suite.
First, create a blank Rosie suite in an appropriate repository. You will probably want to use a “testing” repository if one is available to you.
You can specify the repository to use with the
--prefix
command-line option. For instance to use the (internal) Met Office Testing Repository supply the command line argument--prefix=mot
.rosie create --prefix=<prefix>
You will then be presented with a
rose-suite.info
file open in a text editor. For thetitle
field type “Dummy Weather Forecasting Suite” and for theproject
enter “tutorial”. Save the file and close the editor.Tip
If the text editor does not appear you may have to press enter on the keyboard.
Rosie will create the new suite in the
~/roses
directory and the exact location will appear in the command output. Move into the suite directory:cd ~/roses/<name>
Add Files To The Suite.
Add the files from the Weather Forecasting Suite by running:
rose tutorial rose-weather-forecasting-suite .
We now need to add these files to version control. First check the SVN status by running:
fcm st
You should see a list of files with the
?
symbol next to them, as well asrose-suite.conf
with anM
symbol beside it.?
means the files marked are untracked (not version controlled), whereasM
indicates files which have been modified. Add all untracked files to version control by running:fcm add --check .
Answer yes (“y”) where prompted. Now check the status again:
fcm st
You should see a list of files with the
A
character, meaning “added”, next to them. Finally commit the changes by running:fcm ci
A text editor will open. Add a message for your commit, save the file and close the editor. You will then be prompted as to whether you want to make the commit. Answer yes.
You have now added the Weather Forecasting Suite to version control. Open the Trac browser to see your suite:
fcm browse
A web browser window will open, showing the Trac page for your Rosie suite.
Checkout The Suite.
Now that the suite is in the Rosie repository a working copy can be checked out on any machine with access to the repository by executing:
rosie checkout <name>
Test this by deleting the working copy then checking out a new one:
cd ~/roses rm -rf <name> rosie checkout <name>
Practical Extension
Make Changes In A Branch.
Next we will make a change to the suite. Rather than making this change in the “trunk” (referred to as “master” in git terminology) we will work in a new “branch”.
Create a new branch called “configuration-change” by running:
fcm bc configuration-change
Provide a brief commit message of your choosing when prompted and enter yes (“y”).
You can list all branches by running:
fcm bls
Switch to your new branch:
fcm sw configuration-change
Next, either using the Rose 2019 rose config-edit GUI or a text editor, change the
RESOLUTION
setting in therose-suite.conf
file to0.1
.Check the status of the project:
fcm st
You should see the
rose-suite.conf
file with aM
, meaning modified, next to it. Commit the change by running:fcm ci
Again you will need to provide a commit message and answer yes to the prompt.
Merge The Branch.
Switch back to the trunk then merge your change branch into the trunk:
fcm sw trunk fcm merge configuration-change
Check the status (you should see the
M
symbol next to therose-suite.conf
file) then commit the merge:fcm st fcm ci